webForumDet fria alternativet

SQL problem

6 svar · 594 visningar · startad av plumba69

plumba69Medlem sedan dec. 20113 inlägg
#1

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?

pebiMedlem sedan jan. 2005328 inlägg
#2

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

pebiMedlem sedan jan. 2005328 inlägg
#3

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
plumba69Medlem sedan dec. 20113 inlägg
#4

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

pebiMedlem sedan jan. 2005328 inlägg
#5

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
plumba69Medlem sedan dec. 20113 inlägg
#6

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)

pebiMedlem sedan jan. 2005328 inlägg
#7

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
Genererad på 389 ms · cache AV · v20260730165559-full.f96bc7eb