sql >> Databasteknik >  >> RDS >> Sqlserver

gör FLERA undergruppsaggregationer

Jag tror att i princip samma idé gäller som i den tidigare frågan. Du vill räkna antalet färdiga poster strikt före en given färdig post. Detta ger dig en gruppidentifierare som sedan kan användas för aggregering.

I SQL Server 2012+ skulle du använda den kumulativa summafunktionen. I tidigare versioner kan du göra samma sak med en korrelerad underfråga eller yttre tillämpning.

Den här versionen modifierar ovanstående på flera sätt. I synnerhet förenklar det logiken för att definiera grp . Jag ser inte lätt hur row_number() passar in i frågan. Jag förstår logiken -- räkna upp de utförda åtgärderna och använd det för aggregering. Men att få det värdet på alla rader i gruppen är inte trivialt.

SELECT r.Key, a.CYCLE_BEGIN_DATE, a.CYCLE_END_DATE, a.NUM_ACTIONS_IN_CYCLE
FROM Records r LEFT OUTER JOIN
     (select a.key, a2.grp, min(Date) as CYCLE_BEGIN_DATE,
             max(case when Action = 'Done') then Date end) as CYCLE_END_DATE,
             count(*) as NUM_ACTIONS_IN_CYCLE
      from actions a outer apply
           (select count(*) as grp
            from actions a2
            where a2.key = a.key and a2.date < a.date and a2.action = 'Done'
           ) a2
     group by a.key, a2.grp
    ) a
    on r.key = a.key;



  1. postgresql duplicate key bryter mot unik begränsning

  2. Activex ListView Control Tutorial-01

  3. Ansluter till Microsoft Access i IRI Workbench

  4. Skillnaden mellan MySQL ÄR INTE NULL och !=''