-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
4

2 回答 2

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中的演示

于 2013-03-29T06:27:46.830 回答
0

SQL FIDDLE DEMO

基本上你需要找到可能的重复记录并选择其中之一。您可以使用rank over,在您的情况下,它应该[date] 和 [item]时间排序,如果您想选择 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]
于 2013-03-29T07:01:34.360 回答