Vinnaren i pepparkakshustävlingen!
2016-01-31, 23:10
  #1
Medlem
Hallå,

Låt oss säga att jag har en faktatabell med transaktioner som ser ut såhär:

Kod:
ID            Datum                      Transaktionstyp
1            2015-01-01                    Transa A
2            2015-01-05                    Transa B
3            2015-01-06                    Transa A
4            2015-01-20                    Transa C

Och jag vill nu kolla om någon kategori återkommer inom en vecka och märka upp dessa med en "1", jag har då antagit att jag måste göra såhär, genom att använda en sub query och joina tabellen med sig själv:
Kod:
SELECT
t1.ID
,t1.Datum
,t1.Transaktionstyp
,CASE WHEN t2.ID is not null THEN 1 ELSE 0 END as Återkommer
FROM fakta_transor

LEFT JOIN
        (SELECT ID, Datum, Transaktionstyp
        FROM fakta_transor) t2
ON t1.Transaktionstyp=t2.Transaktionstyp and
t1.ID != t2.ID and
DATEDIFF(WEEK,t1.Datum,t2.Datum) between 0 and 1

Det skulle alltså ge mig följande resultat:

Kod:
ID            Datum                      Transaktionstyp     Återkommer 
1            2015-01-01                    Transa A                1
2            2015-01-05                    Transa B                0
3            2015-01-06                    Transa A                0
4            2015-01-20                    Transa C                0

Och sen vill jag väl troligtvis märka upp raden som är själva den återkommande transaktionen med ett annat värde. Så då måste jag joina tabellen med sig själv igen.

Jag funderar på om det kan tänkas finnas ett effektivare sätt att lösa detta?
Citera
2016-02-01, 14:44
  #2
Medlem
Det första du kan göra är att ändra din left join till en outer apply. Om du t.ex. har samma transtyp mån, tis och fredag kommer det som det är nu bli 6 rader och det tror jag inte att du vill ha.

__________________
Senast redigerad av poussard 2016-02-01 kl. 14:52. Anledning: Fix
Citera
2016-02-01, 23:03
  #3
Medlem
Citat:
Ursprungligen postat av poussard
Det första du kan göra är att ändra din left join till en outer apply. Om du t.ex. har samma transtyp mån, tis och fredag kommer det som det är nu bli 6 rader och det tror jag inte att du vill ha.

Just det, kom på det där med dubbletterna precis efter jag postat frågan. Hade varit tvungen att välja distinkta rader I guess.

Men det spelar ju mindre roll, för ditt lösningsförslag ser ju riktigt smutt ut och är precis vad jag var ute efter. Jag var inte direkt medveten om funktionen Outer Apply, men att kunna referera den yttre tabellen inifrån en sub-query är ju mer eller mindre precis vad jag är ute efter.
Ttackar!
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback