我的问题是我不断添加不同日期的行,因此表格中歌曲的第一个条目不一定是最早出现的,这就是我想要显示的内容。
播放表:
song_name played_id show_id
-------------------------------------------
A Song 0001 000a
Another Song 0002 000a
A Song 0003 000b
显示表格:
show_id date
-------------------------------------------
000a 2/2/2012
000b 1/1/2011
期望的结果:
song_name played_id date
-------------------------------------------
A Song 0003 1/1/2011
Another Song 0002 2/2/2012
当前令人沮丧的结果:
song_name played_id date
-------------------------------------------
A Song 0001 2/2/2012
Another Song 0002 2/2/2012
来自此查询:
SELECT p.song_id, s.date AS date, p.song_name, p.show_id, p.set_order, p.played_id
FROM played p
INNER JOIN shows s
ON p.show_id = s.show_id
GROUP BY p.song_id
ORDER BY s.date ASC
当我将LIMIT 1添加到上述查询中时,我的结果并未显示离散歌曲名称列表,而只显示一行。
我假设我可能需要使用子查询,因为GROUP BY在ORDER BY有机会查看所有日期之前选择每首歌的第一次出现,但我不是当然。在此先感谢您的帮助!
答案 0 :(得分:1)
试试这个:
SELECT
p.song_id,
s.date,
p.song_name,
p.show_id,
p.set_order,
p.played_id
FROM
played p
INNER JOIN
shows s ON p.show_id = s.show_id
INNER JOIN
(SELECT
p.song_id, MIN(s.date) DATE
FROM
played p
INNER JOIN shows s ON p.show_id = s.show_id
GROUP BY p.song_id) x ON p.song_id = x.song_id
AND s.date = x.date;
找到每个song_id的最早日期,然后将结果与主要联接结合以找到所需的结果。