Ho giocato con i set in SQL Server 2000 e avere la seguente struttura della tabella per una delle mie tabelle temporanee (#Periods):Selezione SUM di TOP 2 valori all'interno di una tabella con GROUP multiplo in SQL
RestCTR HoursCTR Duration Rest ---------------------------------------- 1 337 2 0 2 337 46 1 3 337 2 0 4 337 46 1 5 338 1 0 6 338 46 1 7 338 2 0 8 338 46 1 9 338 1 0 10 339 46 1 ...
Quello che mi piacerebbe fare è calcolare la somma dei 2 periodi di riposo più lunghi per ogni HoursCTR, preferibilmente usando insiemi e tabelle temporanee (piuttosto che cursori o subquery annidate).
Ecco la query sogno che semplicemente non funziona in SQL (non importa quante volte lo faccio funzionare):
Select HoursCTR, SUM (TOP 2 Duration) as LongestBreaks
FROM #Periods
WHERE Rest = 1
Group By HoursCTR
Il HoursCTR può avere qualsiasi numero di periodi di riposo (tra cui nessuno).
La mia soluzione attuale non è molto elegante e comporta fondamentalmente le seguenti fasi:
- Prendi la durata massima di riposo, gruppo da HoursCTR
- Selezionare il primo (min) RestCTR riga che restituisce questo durata max per ogni HoursCTR
- Ripetere il passaggio 1 (escluse le file già raccolti nel passaggio 2)
- Ripetere passaggio 2 (sempre escludendo righe raccolti nel passaggio 2)
- Combinare il RestCTR righe (dal punto 2 e 4) in un'unica tabella
- Get somma della durata puntato dalla righe nel passaggio 5, raggruppati per HoursCTR
Se ci sono delle funzioni impostate che tagliano questo processo giù, sarebbe molto gradito
Come ci si selezionano due pause _longest_ Che cosa mi manca? – Arkadiy
OP indica SQL Server 2000. ROW_NUMBER() e CTE non sono disponibili. – bobs
@bobs: Grazie, mi sono perso. Ho aggiunto una soluzione diversa. –