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

laver FLERE undergruppesammenlægninger

Jeg tror grundlæggende, at den samme idé gælder som i det tidligere spørgsmål. Du ønsker at tælle antallet af færdige poster strengt før en given færdig post. Dette giver dig en gruppe-id, som derefter kan bruges til aggregering.

I SQL Server 2012+ ville du bruge den kumulative sum funktionalitet. I tidligere versioner kan du gøre det samme med en korreleret underforespørgsel eller ydre ansøgning.

Denne version ændrer din ovenstående på flere måder. Især forenkler det logikken i at definere grp . Jeg kan ikke nemt se hvordan row_number() passer ind i forespørgslen. Jeg forstår logikken -- opregn de udførte handlinger og brug det til aggregering. Men at få denne værdi på alle rækkerne i gruppen er ikke-trivielt.

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. Laravel 5.5 Error Basistabel eller visning findes allerede:1050 tabel 'brugere' findes allerede

  2. DAYOFMONTH() Eksempler – MySQL

  3. Hvordan vælger du fra mysql, hvor sidste tegn i en streng =x?

  4. Tabel kan ikke oprettes i mysql -Error 1064