1

私はここで新しいです、そして私は私が一日中苦労している問題でいくらかの助けを大いに感謝します。

次の2つの表を検討してください。

         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つのアルバムが複数の年に関連付けられる可能性があると想定してください。

ジャンル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;
4

3 に答える 3

1

それは非常に単純なはずです:

SELECT album_id, MAX(year) 
  FROM years
 GROUP BY album_id
 ORDER BY MAX(year) DESC;

集計関数max()を使用すると、最新の年を選択できます。group by集計関数を使用しているため、句も必要です。

特定のジャンルのアルバムのみが必要な場合は、joinステートメントを追加するだけです。

于 2012-12-09T22:08:00.700 に答える
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
于 2012-12-09T22:13:07.633 に答える
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
于 2012-12-09T22:11:40.033 に答える