2017-09-23 2 views
1

J'essaie de renvoyer les datetime min et max pour un ensemble groupé via une partition par instruction. La ligne min fonctionne mais le max renvoie la date maximale des résultats non groupés. SQL Server 2016. Qu'est-ce que je manque?SQL Server 2016 max dans la partition par instruction select ne fonctionne pas

SELECT 
    [temp_Emp], [temp_EmpID], [temp_Date], [Temp_Start], [Temp_End], 
    MIN(Temp_Start) OVER (PARTITION BY temp_EmpID, temp_Date ORDER BY Temp_Start, Temp_End) AS 'Start', 
    MAX(Temp_End) OVER (PARTITION BY temp_EmpID, temp_Date ORDER BY Temp_Start, Temp_End) AS 'End' 
FROM 
    tmp_startend 

Résultat:

temp_EmpID temp_Date Temp_Start Temp_End Start End 
300 7/08/2017 7/08/2017 8:00 7/08/2017 8:15 7/08/2017 8:00 7/08/2017 8:15 
300 7/08/2017 7/08/2017 8:15 7/08/2017 8:30 7/08/2017 8:00 7/08/2017 8:30 
300 7/08/2017 7/08/2017 9:00 7/08/2017 10:00 7/08/2017 8:00 7/08/2017 10:00 
300 7/08/2017 7/08/2017 9:15 7/08/2017 14:30 7/08/2017 8:00 7/08/2017 14:30 
300 7/08/2017 7/08/2017 9:30 7/08/2017 14:00 7/08/2017 8:00 7/08/2017 14:30 
300 7/08/2017 7/08/2017 10:00 7/08/2017 13:00 7/08/2017 8:00 7/08/2017 14:30 
300 7/08/2017 7/08/2017 10:00 7/08/2017 14:30 7/08/2017 8:00 7/08/2017 14:30 
300 7/08/2017 7/08/2017 14:00 7/08/2017 15:00 7/08/2017 8:00 7/08/2017 15:00 

Répondre

1

Laissez le order by. Cela rend les valeurs cumulatives:

SELECT [temp_Emp], [temp_EmpID],[temp_Date],[Temp_Start],[Temp_End], 
     min(Temp_Start) over (partition by temp_EmpID, temp_Date) as [Start], 
     max(Temp_End) over (partition by temp_EmpID, temp_Date) as [End] 
FROM tmp_startend; 

Le min() vient de se passer à travailler parce que la order by mettre la valeur plus petite - de sorte que le min() cumulatif est le même que l'ensemble min().

+0

Merci pour cela, j'ai essayé de supprimer la commande mais j'ai eu une erreur disant que la partition nécessitait une commande, je dois avoir mis dans un mauvais format. – Dave