sql >> Database teknologi >  >> RDS >> Sqlserver

flere transaktioner inden for en bestemt tidsperiode, begrænset af datointerval

Desværre er vinduesfunktionerne i SQL Server 2005 bare ikke helt kraftfulde nok. Jeg ville løse dette ved at bruge en korreleret underforespørgsel.

Den korrelerede underforespørgsel tæller antallet af gange, en person har købt varen inden for 14 dage efter hvert køb (og ikke medregnet det første køb).

select t.*
from (select t.*,
             (select count(*)
              from t t2
              where t2.personnumber = t.personnumber and
                    t2.itemnumber = t.itemnumber and
                    t2.transactionnumber <> t.transactionnumber and
                    t2.transactiondate >= t.transactiondate and 
                    t2.transactiondate < DATEADD(day, 14, t.transactiondate
             ) NumWithin14Days
      from transactions t
      where transactionDate between '2001-01-01' and '2001-03-01'
     ) t
where NumWithin14Days > 0

Du vil måske også sætte tidsbegrænsningen i underforespørgslen.

Et indeks over transactions(personnumber, itemnumber, transactionnumber, itemdate) kan hjælpe med at køre meget hurtigere.



  1. Hvad blokerer Vælg top 1 * fra Tabelnavn med (nolock) fra at returnere et resultat?

  2. Overførsel af databaseforespørgselsresultater til jQuery Sparkline-diagrammer ved hjælp af PHP

  3. SQL - Hvordan finder man det højeste tal i en kolonne?

  4. Indsæt 0 eller 1 i MySQL baseret på afkrydsningsfeltværdi