我正在使用食堂类型的数据库系统并尝试开发存储过程。
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 :(得分: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]
中的演示
答案 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]