我如何获得每位歌手发布的最新唱片

时间:2019-02-13 23:10:39

标签: sql

我有3张桌子

表1:songs

-songname varchar
-singerlabel varchar
-date date                            
-category varchar

表2:singer

-singerlabel varchar
-singer#  varchar

表3:singerNote

-singer# varchar
-firstname varchar
-lastname  varchar

表1使用singerlabel连接到表2。

表2使用singer#连接到表3。

2 个答案:

答案 0 :(得分:0)

如果RDBMS支持窗口功能,则可以使用bye来实现:

ROW_NUMBER()

没有窗口功能,您可以使用具有SELECT x.* FROM ( SELECT si.*, sn.first_name, sn.last_name, so.songname, so.date, so.category ROW_NUMBER() OVER(PARTITION BY so.singerlabel ORDER BY so.date DESC) rn FROM singer si INNER JOIN singerNote sn ON sn.singer# = si.singer# INNER JOIN songs so ON so.singerlabel = si.singerlabel ) x WHERE x.rn = 1 条件的相关子查询,以确保您正在加入最新的歌曲:

NOT EXISTS

答案 1 :(得分:0)

使用此查询:

select singerlabel, max(date) maxdate
from songs
group by singerlabel

您将获得每个singerlabel的最大日期,然后将join移至其他3个表:

select sn.firstname, sn.lastname, songs.songname
from (
  select singerlabel, max(date) maxdate
  from songs
  group by singerlabel
) s inner join singer
on singer.singerlabel = s.singerlabel
inner join singernote sn
on sn.singer = singer.singer 
inner join songs
on songs.singerlabel = s.singerlabel and songs.date = s.maxdate