SQL连接选择最大值,但也选择不存在值的位置
我有下面的SQL,它可以工作-它显示所有的项目,以及MAX starttime 不过,我还想向大家展示那些在播放日志中没有记录的项目——如何才能有记录SQL连接选择最大值,但也选择不存在值的位置,sql,greatest-n-per-group,Sql,Greatest N Per Group,我有下面的SQL,它可以工作-它显示所有的项目,以及MAX starttime 不过,我还想向大家展示那些在播放日志中没有记录的项目——如何才能有记录 SELECT items.idx, items.title, items.artist, playlistlog.starttime FROM items LEFT JOIN playlistlog ON playlistlog.item = items.idx WHERE playlistlog.starttime = ( SELECT
SELECT items.idx, items.title, items.artist, playlistlog.starttime
FROM items
LEFT JOIN playlistlog ON playlistlog.item = items.idx
WHERE playlistlog.starttime = (
SELECT MAX(starttime)
FROM playlistlog AS pl2
WHERE pl2.item = items.idx
)
where
子句将左连接转换为内部连接
使用和
而不是WHERE
SELECT items.idx, items.title, items.artist, playlistlog.starttime
FROM items
LEFT JOIN playlistlog ON playlistlog.item = items.idx
and playlistlog.starttime = (
SELECT MAX(starttime)
FROM playlistlog AS pl2
WHERE pl2.item = items.idx
)
使用标准SQL的窗口函数可以稍微缩短时间:
SELECT items.idx, items.title, items.artist, pl.starttime
FROM items
LEFT JOIN (
select item,
starttime,
row_number() over (partition by item order by starttime desc) as rn
from playlistlog
) pl ON pl.item = items.idx AND pl.rn = 1
你每天都会学到新的东西-谢谢你,这工作做得很好!