我正在学习SQL,我需要做几件事。
我正在进行查询,以便将之前的orderdate与orderdate进行比较。我想为此使用相关子查询。我已经使用Cross Apply和Window函数创建了它。
目前我有这个:
select
b1.klantnr,
DATEDIFF(D, (Select MAX(b1.Besteldatum)),
(Select MAX(b1.Besteldatum)
where besteldatum not in (Select MAX(b1.besteldatum)))) as verschil
from
bestelling b1
group by
b1.klantnr, b1.besteldatum
我在datediff列中只获得null
个值。它应该返回:
我正在使用SQL Server 2014 Management Studio。
任何帮助表示感谢。
答案 0 :(得分:1)
这是一个简单的方法:
select datediff(day, min(bs.Besteldatum), max(bs.Besteldatum)) as most_recent_diff
from (select top (2) bs.*
from bestelling bs
order by bs.Besteldatum
) bs;
这使用子查询,但不使用相关子查询。如果您在bestselling(Besteldatum)
上有索引,那么应该有非常好的表现。
答案 1 :(得分:0)
相关的子查询方式。
select top 1 bs.*,datediff(day,
(select max(bs1.Besteldatum)
from bestelling bs1
where bs1.Besteldatum<bs.Besteldatum),
bs.Besteldatum
) as diff
from bestelling bs
order by bs.Besteldatum desc
这只给出了最新日期和之前日期之间的差异。如果您需要所有记录,请从查询中删除top 1
。