合并具有最小日期和最大日期的记录

时间:2018-10-30 23:17:50

标签: sql sql-server

我在SQL Server查询中有两行数据,需要根据一列的最小日期和第二列的最大日期的标准将它们合并为一列。

示例数据:

NULL

我需要使用OrderID PrevCFS NewCFS ChangeTime --------------------------------------------------- 1 75 25 2018-10-31 08:00:00 2 25 0 2018-10-31 09:00:00 的最早日期和PrevCFS的最新日期来合并它们,因为可能会有两个以上的记录:

结果:

NewCFS

PrevCFS NewCFS ChangeTime --------------------------------------------------- 75 0 2018-10-31 09:00:00 和“更改时间”在结果中并不重要。

4 个答案:

答案 0 :(得分:1)

您可以尝试使用MAXMIN聚合函数。

SELECT MAX(PrevCFS) PrevCFS,
       MIN(NewCFS) NewCFS,
       MAX(ChangeTime) ChangeTime
FROM T

答案 1 :(得分:0)

select
  (
    select top 1 PrevCFS
    from MyTable
    order by ChangeTime asc
  )
  ,
  (
    select top 1 NewCFS
    from MyTable
    order by ChangeTime desc
  )

答案 2 :(得分:0)

您可以通过降序获得最新的列,而通过升序可以获取较旧的列。

这里是组合它们的一种方法:

select top (1) eprev.OldCFS, e.NewCFS, e.ChangeTime
from example e cross join
     (select top (1) e2.*
      from example e2
      order by e.ChangeTime asc
     ) eprev
order by e.ChangeTime desc

答案 3 :(得分:0)

这有帮助吗??

    Declare @T Table(OrderId int,PrevCFS int, NewCFS int,ChangeTime DATETIME)

    Insert into @T
    SELECT 1,75,25,'2018-10-31 08:00:0' Union All
    SELECT 2,25,0,'2018-10-31 09:00:00'

    Select t1.PrevCFS,t2.NewCFS,t2.ChangeTime from @T t1
    INNER JOIN @T t2 on t1.NewCFS=t2.PrevCFS

输出:

    PrevCFS    NewCFS           ChangeTime
------------------------------------------------
      75         0       2018-10-31 09:00:00.000