假设我有这个 MS SQL 表,实际上它是包含 5 个表的查询的结果:
ID SOrder Line Date1 Date2 Date3 SomeColumn
1 123a456 10 2018-01-01 2018-01-01 2018-01-01 abc
2 123a456 10 2018-01-01 2019-01-01 2018-01-01 def
3 123a456 10 2019-01-01 2018-01-01 2020-01-01 ghi
4 123a456 10 2018-01-01 2018-01-01 2019-01-01 jkl
5 123a456 10 2018-01-01 2018-01-01 2018-01-01 mno
6 123a456 20 2018-01-01 2020-01-01 2018-01-01 prs
7 123a456 20 2019-01-01 2018-01-01 2019-01-01 tuv
8 123a456 20 2018-01-01 2018-01-01 2018-01-01 xxx
9 123a456 30 2018-01-01 2020-01-01 2018-01-01 yyy
10 123a777 10 2019-01-01 2019-01-01 2018-01-01 zzz
11 123a777 10 2020-01-01 2019-01-01 2019-01-01 111
12 123a777 20 2019-01-01 2018-01-01 2018-01-01 222
13 123a777 20 2021-01-01 2019-01-01 2019-01-01 333
14 123a777 20 2018-01-01 2018-01-01 2020-01-01 444
我只想提取 ID=3,6,9,11,13 且日期最高的行。因此,从 Line 列值等于 10 的前 5 条记录中,我只想要 ID=3 的行,因为它具有 5 条记录中最高的日期 (2020-01-01)。
1) 如何通过 T-SQL 查询实现此目的?
2) 或者,我可以执行一个简单的 SELECT * FROM MyTable
并在 C# 或 Javascript/AngularJs 1 中执行上述过滤。但是如何实现呢?
最佳答案
使用下面的代码你可以得到你的答案。
CREATE TABLE #T1
(
ID int
,SOrder VARCHAR(20)
,Line int
,Date1 datetime
,Date2 Datetime
,Date3 Datetime
)
;with cte as (
SELECT ID,Line,SOrder, Date1 from #T1
union
SELECT ID,Line,SOrder, Date2 from #T1
union
SELECT ID,Line,SOrder, Date3 from #T1
)
SELECT T.* FROM #T1 T
INNER JOIN (SELECT max(Date1) as Date1,Line,SOrder FROM cte GROUP BY Line,SOrder) DT
ON (DT.Date1=T.Date1 OR DT.Date1=T.Date2 OR DT.Date1=T.Date3)
AND (DT.Line=T.Line)
AND (DT.SOrder=T.SOrder)
关于javascript - 通过 T-SQL 查询或 C# 或 Javascript/AngularJs 1 从多列和行中获取具有最高日期的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52036424/