Har en tabell med personnummer (pnr) och startdatum (ÅÅÅÅ-MM-DD) och slutdatum (ÅÅÅÅ-MM-DD). Samma pnr kan förekomma flera gånger. Jag vill nu kolla om det någonstans finns ett personnummer som har mindre än 30 dagar mellan ett slutdatum och nästa startdatum. Någon som vet?
SQL problem
6 svar · 594 visningar · startad av plumba69
I MySQL borde det väl bli:
select pnr from table where datediff(endate,startdate) < 30
Och i SQL server måste man nog ange att det är dagar så typ:
select pnr from table where datediff(day,enddate,startdate) < 30
Sorry läste inte så noga, Nästa startdate var det ju, då hevövs väl någon form av subquery, så då är det nog bra att veta vilken DB det skall vara
OK, för SQL server borde det väl bli typ så här (helt otestat och bara "on top of my head" men princioen borde lira tycker jag):
select
t1.pnr,
DateDiff(day, t2.starttime, t1.endtime) as daysbetween
FROM
table t1,
table t2
WHERE
t1.pnr = t2.pnr
and
DateDiff(day, t2.starttime, t1.endtime) < 30
Tackar för svar men tyvärr var jag dålig på att förklara mitt problem. Jag ger ett exempel
id indat utdat
1 2011-01-01 2011-01-02
1 2011-01-03 2011-01-05
2 2011-01-01 2011-01-04
2 2011-06-01 2011-06-02
Vad jag skulle vilja få ut är poster i tabellen indat är mindre än 30 dagar från utdat för samma id. I exemplet ovan är det den andra posten där indat=2011-01-03 och det senaste utdatumet är 2011-01-02
Ja, det borde väl vara det min fråga ger, eller har jag tänkt helt krokigt?
Med dina namn:
select
t1.id,
t1.indat,
DateDiff(day, t2.indat, t1.utdat) as daysbetween
FROM
tablename t1,
tablename t2
WHERE
t1.id = t2.id
and
DateDiff(day, t2.indat, t1.utdat) < 30
Tackar, ett problem kvarstår. I min fil kan samma ID:nr förekomma flera gånger under året...då funkar det inte (annars funkade det)
Hmm, det borde inte vara något problem med flera poster,
Prova att skriva ut fler fält så du ser vad join gör.
T.ex så här skriv ut all par för ett vist id (testidvärde)
select
t1.id as firstid,
t1.indat as firstindat,
t1.utdat as firstutdat,
t2.id as secondid,
t2.indat as secondindat,
t2.utdat as secondutdat,
DateDiff(day, t2.indat, t1.utdat) as daysbetween
FROM
tablename t1,
tablename t2
WHERE
t1.id = t2.id
and
t1.id = testidvärde