2017-09-23 104 views
1

我試圖通過語句分區返回分組集的最小和最大日期時間。分鐘線有效,但最大值返回未分組結果的最大日期。 SQL Server 2016.我錯過了什麼?SQL Server 2016最大分區中的select語句不起作用

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 

結果:

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 

回答

1

離開了order by。這使得值累計:

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; 

min()剛剛發生的工作,因爲order by把最小值第一 - 所以累積min()相同的整體min()

+0

謝謝你,我嘗試刪除順序,但我得到一個錯誤,說分區需要一個命令,我必須把錯誤的格式。 – Dave