2013-03-29 135 views
-1

我正在使用食堂類型的數據庫系統並嘗試開發存儲過程。從表中刪除多個記錄

empcode time   date     item 
------------------------------------------------------------- 
005153 08:45:03 05/10/2012 12:00:00 AM BREAKFAST **** 
005153 08:45:04 05/10/2012 12:00:00 AM BREAKFAST **** 
005153 13:48:47 05/10/2012 12:00:00 AM LUNCH 
005153 17:40:33 05/10/2012 12:00:00 AM BREAKFAST 

標記的記錄是關注區域。 我想只選擇一條記錄。這應該根據時隙完成。有幾個員工,每個人都有不同的時間吃早餐。選定的員工有兩個早餐時段。因此它應該從另一個時隙中選擇一個。

輸出應該是這樣的。

empcode time   date     item 
------------------------------------------------------------- 
005153 08:45:03 05/10/2012 12:00:00 AM BREAKFAST 
005153 13:48:47 05/10/2012 12:00:00 AM LUNCH 
005153 17:40:33 05/10/2012 12:00:00 AM BREAKFAST 
+0

要刪除重複的數據嗎?或者只是想選擇非重複的數據?你有什麼嘗試? – hims056

+3

標題似乎與以下問題相沖突:當您說「移除」時,是指「從表格中刪除行」還是「從輸出中刪除它們」? – Bohemian

回答

1

試試這個: -

With cte as 
(
Select *, 
row_number() over (partition by datepart(minute,[time]),[date] order by empcode) rn 
from Employee 
) 
Select * from cte where rn=1 order by [time] 

演示在SQL FIDDLE

0

SQL FIDDLE DEMO

基本上你需要找到可以複製的記錄,並選擇其中之一。您可以使用排名超過,並在你的情況下,應該分區由 [日期]和[項目] 爲了通過時候,如果你想選擇DUP的較早記錄爲輸出,則使用默認的升序,或者使用DESC。


WITH cte 
AS 
(
    SELECT *, 
      rank() over (partition BY Date,Item ORDER BY time) rn 
    FROM Employee 
) 
SELECT [empcode],[time],[date],[item] 
FROM cte WHERE rn=1 
ORDER BY [date],[time]