我在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
和“更改时间”在结果中并不重要。
答案 0 :(得分:1)
您可以尝试使用MAX
和MIN
聚合函数。
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