【发布时间】: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