通过T-SQL查询或C或Javascript/AngularJs 1从多个列和行中获取日期最高的记录

通过T-SQL查询或C或Javascript/AngularJs 1从多个列和行中获取日期最高的记录,javascript,c#,sql,angularjs,tsql,Javascript,C#,Sql,Angularjs,Tsql,假设我有一个MS SQL表,实际上它是一个包含5个表的查询结果: 其中,我只想提取ID=3,6,9,11,13且日期最高的行。因此,从行列值等于10的前五条记录中,我只想要ID=3的行,因为它的日期是5条记录中最早的2020-01-01 1如何通过T-SQL查询实现这一点 2或者,我可以从MyTable中执行一个简单的SELECT*,并使用C或Javascript/AngularJs 1执行上述过滤。但是怎么做呢?我会用apply取消日期 这将获取每行中的最大日期,并为行枚举它们。外部查询选择最

假设我有一个MS SQL表,实际上它是一个包含5个表的查询结果:

其中,我只想提取ID=3,6,9,11,13且日期最高的行。因此,从行列值等于10的前五条记录中,我只想要ID=3的行,因为它的日期是5条记录中最早的2020-01-01

1如何通过T-SQL查询实现这一点


2或者,我可以从MyTable中执行一个简单的SELECT*,并使用C或Javascript/AngularJs 1执行上述过滤。但是怎么做呢?

我会用apply取消日期

这将获取每行中的最大日期,并为行枚举它们。外部查询选择最新日期

如果将top 1与ties一起使用,则您甚至不需要子查询:

select top (1) with ties t.*
from t cross apply
     (select max(v.dte) as dte
      from values (date1), (date2), (date3)
     ) v(dte)
order by row_number() over (partition by SOrder, line order by dte desc)

我将使用apply取消日期

这将获取每行中的最大日期,并为行枚举它们。外部查询选择最新日期

如果将top 1与ties一起使用,则您甚至不需要子查询:

select top (1) with ties t.*
from t cross apply
     (select max(v.dte) as dte
      from values (date1), (date2), (date3)
     ) v(dte)
order by row_number() over (partition by SOrder, line order by dte desc)

使用下面的代码你可以得到你的答案

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)

使用下面的代码你可以得到你的答案

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)

你试过什么?显示您当前的查询尝试。顺便说一句,这里的大多数人想要格式化的文本,而不是图像。我现在没有什么有用的。你试过什么?显示您当前的查询尝试。顺便说一句,这里的大多数人想要格式化的文本,而不是图像。我现在没有什么有用的东西。