我有一张桌子,我想为每个人选择每天的第一个“例外” - 例如:
date agentname exception start stop
01/10/2013 Smith Bob Open Time 07:00 08:30
01/10/2013 Smith Bob Open Time 08:45 10:45
07/10/2013 Smith Bob Open Time 07:00 08:30
07/10/2013 Smith Bob Open Time 08:45 10:45
08/10/2013 Smith Bob Open Time 07:00 08:30
08/10/2013 Smith Bob Open Time 08:45 10:45
04/10/2013 Owen John On Loan 07:00 14:00
04/10/2013 Owen John Break 14:00 15:00
07/10/2013 Rix Linda Open Time 09:00 10:15
07/10/2013 Rix Linda On Loan 11:00 11:15
sql查询需要拔出:
date agentname exception start stop
01/10/2013 Smith Bob Open Time 07:00 08:30
07/10/2013 Smith Bob Open Time 07:00 08:30
08/10/2013 Smith Bob Open Time 07:00 08:30
04/10/2013 Owen John On Loan 07:00 14:00
07/10/2013 Rix Linda Open Time 09:00 10:15
所以拿鲍勃史密斯 - 他在2013年10月1日有两个参赛作品 - 一个从07:00开始,一个从08:45开始 - 我只想把第一个拿出来(对他来说,和其他人一样,每一天)。
有人可以建议,如何在Sql或Linq中执行此操作?
感谢您的帮助,
标记
答案 0 :(得分:2)
您也可以使用ROW_NUMBER() OVER
WITH T1 as
(
SELECT
t.*,
ROW_NUMBER() OVER
(PARTITION BY [DATE],[agentname] ORDER BY [start]) as RowNumber
FROM T
)
SELECT * FROM T1 WHERE RowNumber=1
Order BY [agentname],[date]
答案 1 :(得分:1)
您只需要在内部查询中进行分组,以获得每天和座席的最短时间。
select [date], agentname, [exception], [start], [stop]
from table1 t
inner join
(
select [date], agentname, min([start]) as [start]
from table1
group by [date], agentname
) X
on t.[date] = x.[date] and t.agentname = x.agentname and t.[start] = x.[start]
如果每天和座席的开始时间都是唯一的,那么这将有效。