从表中删除多个记录

时间:2013-03-29 06:18:45

标签: sql sql-server stored-procedures

我正在使用食堂类型的数据库系统并尝试开发存储过程。

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

2 个答案:

答案 0 :(得分: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

中的演示

答案 1 :(得分: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]