【问题标题】:How to get the latest row by date?如何按日期获取最新行?
【发布时间】:2016-02-10 19:59:39
【问题描述】:

我有一个显示如下数据的现有查询:

NAME     COURSE   PROF    LASTUPDATE
NAME_1   MATH1    PROF_A  2015-10-14 09:55:26.637
NAME_2   ENG1     PROF_B  2015-10-14 09:54:07.087
NAME_2   ENG1     PROF_C  2015-10-14 10:02:31.663 
NAME_3   SOC1     PROF_D  2015-10-14 09:53:28.253 
NAME_4   PHL1     PROF_E  2015-10-14 09:55:47.293
NAME_3   SOC1     PROF_F  2015-10-14 09:59:00.000

我只想选择具有相同名称和课程的最新行(就 lastupdate 而言)?结果表应该是这样的:

NAME     COURSE   PROF    LASTUPDATE
NAME_1   MATH1    PROF_A  2015-10-14 09:55:26.637
NAME_2   ENG1     PROF_C  2015-10-14 10:02:31.663  
NAME_4   PHL1     PROF_E  2015-10-14 09:55:47.293
NAME_3   SOC1     PROF_F  2015-10-14 09:59:00.000

提前谢谢你!

【问题讨论】:

    标签: sql sql-server select sql-order-by


    【解决方案1】:

    一个典型的方法是row_number():

    select t.*
    from (select t.*,
                 row_number() over (partition by name, course order by lastupdate desc) as seqnum
          from t
         ) t
    where seqnum = 1;
    

    【讨论】:

    • @sgeddes 。 . . “同名和课程”(我的亮点)。谢谢。
    • 另外一个问题。我将把它应用到使用“with CTE”的现有查询上。那就是我要得到我的“FROM”的地方。它将类似于:SELECT T.* FROM (with CTE (...)) T。但是,我收到一个错误,提示关键字“with”附近的语法不正确。有没有办法将您建议的查询整合到我现有的查询中?
    • @MarcusL。 . . .您应该问另一个问题,其中包含您的实际查询(或合理的简化)。
    • @GordonLinoff 没关系。我现在整合了您的查询。非常感谢!
    【解决方案2】:

    尝试 first_value

    select
    first_value(last_update) over (partition by name_2 order by last_update DESC) as last_update 
    from my_table;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多