3

私の質問はこれに匹敵しますが、まったく同じではありません。

私は膨大な量の本を含むデータベースを持っており、同じ本のタイトルのいくつかの異なる版があります。WHERE 句 (特定の書籍シリーズを検索するため) で選択している各タイトルの最高の版数を示す SQL ステートメントを探しています。テーブルは次のようになります。

|id|title                    |edition|year|
|--|-------------------------|-------|----|
|01|Serie One Title One      |1      |2007|
|02|Serie One Title One      |2      |2008|
|03|Serie One Title One      |3      |2009|
|04|Serie One Title Two      |1      |2001|
|05|Serie One Title Three    |1      |2008|
|06|Serie One Title Three    |2      |2009|
|07|Serie One Title Three    |3      |2010|
|08|Serie One Title Three    |4      |2011|
|--|-------------------------|-------|----|

私が探している結果はこれです:

|id|title                    |edition|year|
|--|-------------------------|-------|----|
|03|Serie One Title One      |3      |2009|
|04|Serie One Title Two      |1      |2001|
|08|Serie One Title Three    |4      |2011|
|--|-------------------------|-------|----|

私が得た最も近いものは、このステートメントを使用することでした:

select id, title, max(edition), max(year) from books where title like "serie one%" group by title;

ただし、最高の版と年を返し、最初に見つかった ID を含めます。

|--|-----------------------|-------|----|
|01|Serie One Title One    |3      |2009|
|04|Serie One Title Two    |1      |2001|
|05|Serie One Title Three  |4      |2011|
|--|-----------------------|-------|----|

この派手な結合も近いですが、正しい結果は得られません。

select b.id, b.title, b.edition, b.year from books b inner join (select name, max(edition) as maxedition from books group by title) g on b.edition = g.maxedition where b.title like "serie one%" group by title;

これを使用して、独自のタイトルを取得していますが、ほとんどが古い版です。

4

3 に答える 3

2

サブクエリを使用できます。

select b1.id, 
  b1.title,
  b1.edition,
  b1.year
from books b1
inner join
(
  select max(edition) edition, title
  from books
  group by title
) b2
  on b1.edition = b2.edition
  and b1.title = b2.title

デモで SQL Fiddle を参照してください

INまたは、次の句を使用できます。

select id, title, edition, year
from books b
where edition in (select max(edition)
                  from books b1
                  where b.title = b1.title
                  group by title);

デモで SQL Fiddle を参照してください

于 2012-11-27T12:06:59.980 に答える
1

SQLFiddle のを次に示します。

MySql では、これを行うことができます。

select id,title,edition,year from
(
      select id,title,edition,year,
      @i:=if(@title=title,@i+1,1) rn,
      @title:=title 
      from t, (select @i:=0,@title:='') d 
      order by title,edition Desc,year desc
) d where rn=1
于 2012-11-27T11:27:28.227 に答える
0

最も簡単な方法:

select * from (select id, title, edition, year from books order by title, edition desc) group by title;

于 2014-10-31T05:24:11.100 に答える