2015-04-06 78 views
0

我只想問如何管理不同timeIntimeOut的重複行。我的意思是,結果應該是沒有重複行id但同時timeIn該特定的人應該是最低timeIntimeOut應該是最後timeOutattDate必須在同一天。查詢應該如何完成,有什麼想法?SQL,如何刪除重複行並找到最小值(timeIn)和最大值(timeOut)

這裏我的一些簡單的代碼:

SELECT 
    id, name, attend_date, Time_in, Time_out, 
    count(1) as Count_person 
FROM 
    employee 
WHERE 
    attDate = '12/01/2015' AND Time_out IS NOT NULL 
GROUP BY 
    id, name, attend_date, Time_in, Time_out 
HAVING 
    COUNT(1) > 1 

//注意。我只是一個初學者,並試圖提高自己。

+1

請添加你的表結構爲好。 – 2015-04-06 07:17:10

+0

tq wewesthemenance。 shree.pat18-如何添加表結構?我還沒有真正使用這個東西。任何建議? – Erfvan 2015-04-06 07:23:02

+0

你可以添加一些樣本數據與預期的輸出? – ughai 2015-04-06 08:29:26

回答

0

你可以使用ROW_NUMBER,以獲得最新time_in和最後time_out

WITH Cte AS(
    SELECT *, 
     RN_Time_in = ROW_NUMBER() OVER(PARTITION BY id, attDate ORDER BY Time_in), 
     RN_Time_Out = ROW_NUMBER() OVER(PARTITION BY id, attDate ORDER BY Time_Out DESC) 
    FROM employee 
) 
SELECT * 
FROM Cte 
WHERE 
    RN_Time_in = 1 
    AND RN_Time_Out = 1 
+1

謝謝你的回答@wewesthemenace,真的幫我:) – Erfvan 2015-04-29 00:42:16