Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL连接选择最大值,但也选择不存在值的位置_Sql_Greatest N Per Group - Fatal编程技术网

SQL连接选择最大值,但也选择不存在值的位置

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

我有下面的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 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

你每天都会学到新的东西-谢谢你,这工作做得很好!