webForumDet fria alternativet

TOP 1 inuti JOIN .. eller något?

2 svar · 194 visningar · startad av udden

uddenMedlem sedan mars 200174 inlägg
#1

jag har en tabell tblOrderProd som lagrar varje enskild produkt i en order. varje post i denna tabell kan man sätta en status på som lagras i en tabell tblStatus, som även har ett datumfält, och mellan dessa en länktabell.

varje post i tblOrderProd kan ha en slags statushistorik, dvs flera status. tex "beställd" och "skickad" så man kan följa statusen.

mitt problem nu är att jag vill lista alla poster i tblOrderProd där SENASTE statusen är "skickad".

nu gör jag så att jag för VARJE post, gör en

SELECT TOP 1 strStatus FROM tblStatus ...några inner join.. ORDER BY datDate DESC

och kollar om rs("strStatus") = "beställd"

men detta är ju en ruggigt ful lösning, men jag har suttit väldigt länge med top1 inuti inner join med inte fått ihop det. går det att fixa på ett mer optimerat sätt?

så för varje post vill jag göra en TOP 1 selection med sortering på datum, från alla dess olka status, förstår någon? :)

LarsGMedlem sedan dec. 200012 464 inlägg
#2
select * from tblOrderProd
 where orderId in 
  (select orderId from tblStatus ts
     where status = 'skickad'
      and not exists
     (select * from tblStatus
       where  statusDate > ts.statusDate
           and orderId = ts.orderId))
uddenMedlem sedan mars 200174 inlägg
#3

ja det var ju lite skillnad, din mall fungerar precis som jag ville ha det, och kunde relativt enkelt översätta den till min tabell.

tack! ganska mkt snabbare lösning :)

121 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
119 ms — hämta tråd, inlägg och bilagor (db)