3

このようなテーブルを 1 つ持つデータベースがあります。

Books(id, title, author_id, date)

日付フィールドに DATE 型を使用しています。

クエリが実行しようとしているのは、各著者の最新の本のみを返すことです。そのため、同じ author_id を持つ本であっても、その著者の最新の日付フィールドを持つ本のみを返します。したがって、すべての本について、各著者の最新の本を検索し、タイトル、author_id、および日付を返します。

GROUP BY author_id で MAX 関数を使用する必要があると思います....または、おそらく HAVING max(date) を含めますか? 補足として、日付を返すときに、リリースされた年齢を小数点以下 1 桁までにすることは可能ですか? (例: 予約日が 3 年以上前の場合は 3.1?)。

4

5 に答える 5

5

次のクエリを使用できます。

SELECT *
FROM Books
WHERE (author_id, date) IN (SELECT author_id, MAX(date)
                            FROM Books
                            GROUP BY author_id)

サブクエリは、すべての著者について、本の最大日付を返します。外側のクエリは、日付が最大のすべての著者のすべての本を返します。

同じ最大日付で出版された場合、著者ごとに複数の本が返される可能性があることに注意してください。

于 2013-06-30T15:47:16.567 に答える
1

クエリ:

SELECT b.*
FROM Books b
WHERE b.id = (SELECT b2.id
              FROM Books b2
              WHERE b2.author_id = b.author_id
              ORDER BY b2.date desc
              LIMIT 1)
于 2013-06-30T15:54:46.917 に答える
1
SELECT b1.*
FROM Books b1
JOIN (
    SELECT author_id, MAX(date) date
    FROM Books
    GROUP BY author_id
) b2
  ON b2.author_id = b1.author_id
 AND b2.date = b1.date

デモ

于 2013-06-30T16:03:08.157 に答える
1

これを使って:-

SELECT id,title,author_id,date
FROM Books t1
WHERE t1.id = (SELECT t2.id
              FROM Books t2
              WHERE t2.author_id = t1.author_id
              ORDER BY t2.date desc
              LIMIT 1)

このクエリは、各著者の最新の本を返します。

これを確認してください:- SQL FIDDLE

于 2013-06-30T15:46:25.970 に答える
0

SQL-Server では、次のように記述して、各作成者の最新の日付を見つけます。

Select author_id, Max(date) From Books Group By author_id

次に、これを変更してサブクエリとして使用し、各著者の最新の本を見つけることができます。

Select B.* from Books as B
where B.date = (Select Max(date) From Books B2 where B2.author_id = B.author_id)

MySQL の場合、これが機能するかどうかはわかりませんが、おそらく機能するでしょう。もちろん、これを行う他の方法もあります。

于 2013-06-30T15:56:35.800 に答える