【问题标题】:Get last row by datetime in SQL Server在 SQL Server 中按日期时间获取最后一行
【发布时间】:2017-10-07 23:55:28
【问题描述】:

我有下面的 SQL 表:

Id | Code | DateTime1                 | DateTime2
1    3AA2   2017-02-01 14:23:00.000     2017-02-01 20:00:00.000
2    E323   2017-02-12 17:34:34.032     2017-02-12 18:34:34.032
3    DFG3   2017-03-08 09:20:10.032     2017-03-08 12:30:10.032
4    LKF0   2017-04-24 11:14:00.000     2017-04-24 13:40:00.000
5    DFG3   2017-04-20 13:34:42.132     2017-04-20 15:12:12.132
6    DFG3   2017-04-20 13:34:42.132     NULL

Id 是一个自动数字字段。 代码是字符串,Datetime1 和 DateTime2 是日期时间类型。 DateTime1 也不能为空,但 datetime2 可以。

我想通过 datetime1 (MAX datetime1, 最近一个) 获取与具体代码匹配的最后一行,并将 datetime2 设置为 NULL。

例如,考虑到上表,对于代码 DFG3,我想获取 Id=6 的行,它的最大日期为 datetime1,即“2017-04-20 13:34:42.132”

但现在想象以下情况:

Id | Code | DateTime1                | DateTime2
1    3AA2   2017-02-01 14:23:00.000    2017-02-01 20:00:00.000
2    E323   2017-02-12 17:34:34.032    2017-02-12 18:34:34.032
3    DFG3   2017-03-08 09:20:10.032    2017-03-08 12:30:10.032
4    LKF0   2017-04-24 11:14:00.000    2017-04-24 13:40:00.000
5    DFG3   2017-04-20 13:34:42.132    NULL
6    DFG3   2017-05-02 16:34:34.032    2017-05-02 21:00:00.032 

再次,考虑到上表,我想获得相同的结果,即 datetime1 的最后一行(最大 datetime1,最近一个)匹配具体代码,并且 datetime2 设置为 NULL。

然后,在代码 DFG3 的最后一种情况下,不必返回任何行,因为 Id=6 的行是代码 DFG3 的 datetime1(最近)的最后一行,但不为 NULL。

我该怎么做?

【问题讨论】:

  • 第二种情况你想要什么结果?你试过什么?

标签: sql-server max aggregate


【解决方案1】:

你能试试这个查询,让我知道它是否适用于你的情况

Select * From [TableName] where [Code]='DFG3' and [datetime2] is null and [datetime1] = (select max([datetime1]) from [TableName] where [Code]='DFG3')

【讨论】:

    【解决方案2】:

    这会为您带来所有最新的代码,然后您只选择带有datetime2 is null 的代码

    SELECT *
    FROM (
        SELECT *, ROW_NUMBER() OVER (PARTITION BY Code 
                                     ORDER BY DateTime1 Desc) as rn
        FROM yourTable
        ) as T
    WHERE rn = 1   -- The row with latest date for each code will have 1
      and dateTime2 IS NULL
      and code = 'DFG3' -- OPTIONAL
    

    【讨论】:

      猜你喜欢
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      相关资源
      最近更新 更多