Sql server 在SQL Server中按日期时间获取最后一行
我有以下SQL表:Sql server 在SQL Server中按日期时间获取最后一行,sql-server,max,aggregate,Sql Server,Max,Aggregate,我有以下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.03
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是datetime类型。DateTime1也不能为空,但datetime2可以为空
我希望通过datetime1(最大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
如何执行此操作?这将为您带来表中的所有最新代码,然后您只选择一个
datetime2为空的代码
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
这将为您带来表中的所有最新代码,然后您只选择datetime2为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
你能试试这个查询,让我知道它是否适合你的情况吗
Select * From [TableName] where [Code]='DFG3' and [datetime2] is null and [datetime1] = (select max([datetime1]) from [TableName] where [Code]='DFG3')
你能试试这个查询,让我知道它是否适合你的情况吗
Select * From [TableName] where [Code]='DFG3' and [datetime2] is null and [datetime1] = (select max([datetime1]) from [TableName] where [Code]='DFG3')
在第二种情况下你想要什么结果?你试过什么?第二种情况下你想要什么结果?你试过什么?