我试图在2个表上执行联接,而仅从与之联接的表的某一列中获取最大值。我正在MSSQL中做到这一点。
到目前为止,我有以下无法正常运行的语句:
select
u.Id, u.Date, p.Purchase_Date, p.Return_Date, p.Grade
from Users u
inner join (select _p.Id, _p.Purchase_Date, _p.Return_Date, max(_p.Sequence), _p.Grade from Purchases _p group by _p.Id, _p.Purchase_Date, _p.Return_Date, _p.Grade) p
on (p.Id = u.Id) and u.Date between p.Purchase_Date and p.Return_Date
用户表:
Id Date
--------------------
1 2018-10-29
2 2018-10-30
3 2018-03-23
购买表:
Id Purchase_Date Return_Date Sequence Grade
-----------------------------------------------------------------
1 2018-10-29 2018-11-02 3 88
1 2017-08-05 2017-09-02 1 91
1 2017-09-08 2017-10-11 2 35
2 2018-09-09 2018-11-11 2 68
2 2018-05-06 2018-08-15 1 70
3 2018-01-10 2018-01-30 1 55
3 2018-02-28 2018-03-28 2 83
我希望我的结果如下所示:
Id Date Purchase_Date Return_Date Grade
--------------------------------------------------------------------
1 2018-10-29 2018-10-29 2018-11-02 88
2 2018-10-30 2018-09-09 2018-11-11 68
3 2018-03-23 2018-02-28 2018-03-28 83
查询当前没有从“序列”列正确返回最大值,并且我得到了重复记录,这是我不想要的。我怀疑我没有正确使用max运算符,否则我可能会以其他方式加入它
答案 0 :(得分:0)
我认为最简单的方法是使用apply
:
select u.*, p.*
from users u cross apply
(select top (1) p.*
from purchases p
where p.Id = u.Id and
u.Date between p.Purchase_Date and p.Return_Date
order by p.Purchase_Date desc
) p;