sql >> Database >  >> RDS >> Sqlserver

MEERDERE subgroepaggregaties maken

Ik denk dat in wezen hetzelfde idee geldt als in de eerdere vraag. U wilt het aantal voltooide records strikt vóór een bepaalde voltooide record tellen. Dit geeft je een groepsidentificatie die vervolgens kan worden gebruikt voor aggregatie.

In SQL Server 2012+ zou u de cumulatieve som-functionaliteit gebruiken. In eerdere versies kunt u hetzelfde doen met een gecorreleerde subquery of buitenste toepassing.

Deze versie wijzigt uw bovenstaande op verschillende manieren. Het vereenvoudigt met name de logica van het definiëren van grp . Ik zie niet zo snel hoe row_number() past in de vraag. Ik begrijp de logica - noem de uitgevoerde acties op en gebruik die voor aggregatie. Maar het is niet triviaal om die waarde op alle rijen in de groep te krijgen.

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. Geolocatie en Haversine-formule

  2. Fout in doeltabel kan niet worden bijgewerkt

  3. CakePHP:Hoe kan ik een HAVING-bewerking gebruiken bij het bouwen van query's met de zoekmethode?

  4. Highcharts asynchrone serverbelasting met meerdere series