我有两个连接的表,一个表列出了设备ID,并命名了其他ID和最新库存收集的日期。使用以下查询,我将看到类似的内容:
SELECT d.DeviceName, d.DeviceID, r.InvDate FROM Device d
JOIN Report r on d.DeviceID = r.DeviceID
如您所见,有些名称可以重复。
如何提取唯一名称列表(编辑:及其ID)和最新库存日期? 在一些完美的世界里,我会在下面做
SELECT d.DeviceID, MAX(r.InvDate) FROM Device d
JOIN Report r on d.DeviceID = r.DeviceID
GROUP BY d.DeviceName
答案 0 :(得分:2)
您也可以通过row_number()
进行此操作。
select
DeviceName,
DeviceID,
InvDate
from
(
select
DeviceName,
d.DeviceID,
InvDate,
row_number() over (partition by DeviceName order by InvDate desc) as rnk
from device
join report r
on d.DeviceID = r.DeviceID
) vals
where rnk = 1
order by
DeviceID
答案 1 :(得分:0)
为此,我推荐apply
:
SELECT d.DeviceID, d.DeviceName, r.*
FROM Device d OUTER APPLY
(SELECT TOP (1) r.*
FROM report r
WHERE d.DeviceID = r.DeviceID
ORDER BY r.InvDate DESC
) r;
仅注意,这比使用ROW_NUMBER()
(通常)更有效,但这是对横向连接的很好介绍。