我是新来的,我非常感谢能帮助解决一直困扰我的问题。
考虑这两个表:
albums (pkey: id) years (pkey: album_id, year)
id genre_id album_id year
--- -------- -------- ----
450 1 450 2000
451 1 450 2001
452 1 450 2002
453 2 451 2005
454 3 451 2012
452 1998
这可能看起来很奇怪,但请假设一张专辑可以与多年相关联。
我想选择流派1中的所有专辑,按照每张专辑的最新年份排序。 (假设可以按年份排序)。
所以,我想要这个结果:
id year
----- ----
451 2012
450 2002
452 1998
这就是我所在的地方......
显然,我需要在订购结果之前加入表格:
SELECT id, year
FROM albums INNER JOIN years ON albums.id = years.album_id
WHERE genre_id = 1
ORDER BY year;
这将选择流派1中每张专辑的每年记录,而不仅仅是流派1中每张专辑的最新年度记录。
不知何故,我需要合并一个子查询,如此,将加入专辑表的年份限制为仅限该专辑的最新年份,然后再次排序:
SELECT year FROM years WHERE album_id = ??? ORDER BY year DESC LIMIT 1;
答案 0 :(得分:1)
这应该很简单:
SELECT album_id, MAX(year)
FROM years
GROUP BY album_id
ORDER BY MAX(year) DESC;
汇总功能max()
允许您选择最近一年。由于您正在使用聚合函数,因此还需要group by
子句。
如果您只需要某种类型的专辑,只需添加join
声明。
答案 1 :(得分:1)
SELECT album_id, max(year) latest
FROM albums INNER JOIN years ON id = album_id
WHERE genre_id = 1
GROUP BY album_id
ORDER BY latest DESC
答案 2 :(得分:0)
你可能想要的是
select
a.id,
(
select max(b.year) from years b where a.id = b.album_id
) as year
from
albums a
where genre_id = 1
order by year