【问题标题】:Extract first entry for each person for each day每天为每个人提取第一个条目
【发布时间】:2013-11-18 10:08:40
【问题描述】:

我有一张桌子,我试图为每个人选择每天的第一个“例外” - 例如:

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

所以以 Bob Smith 为例 - 他在 2013 年 1 月 10 日有两个条目 - 一个从 07:00 开始,一个从 08:45 开始 - 我只想取出第一个(对于他和其他所有人,对于每天)。

任何人都可以建议,如何在 Sql 或 Linq 中执行此操作?

感谢您的帮助,

标记

【问题讨论】:

    标签: sql sql-server linq linq-to-sql


    【解决方案1】:

    你也可以使用ROW_NUMBER() OVER

    SQLFiddle demo

    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]
    

    【讨论】:

      【解决方案2】:

      您只需要在内部查询中进行分组,以获得每天和代理的最短时间。

       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]
      

      只要开始时间对于每一天和代理都是唯一的,这将起作用。

      【讨论】:

      • 感谢@Szymon - 正是我所需要的。标记
      猜你喜欢
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 2017-12-17
      • 2020-01-12
      • 2023-04-01
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      相关资源
      最近更新 更多