2

このタスクを実行するためのMySQLクエリを作成するにはどうすればよいですか?

表:作家

w_id    w_name
---------------
  1     Michael
  2     Samantha
  3     John
---------------

表:記事

a_id   w_id   timestamp   a_name
----------------------------------------
  1      1    0000000001  PHP programming
  2      3    0000000003  Other programming languages
  3      3    0000000005  Another article
  4      2    0000000015  Web design
  5      1    0000000020  MySQL
----------------------------------------

0000000005より前に最初の記事を公開したライターのみを選択する必要があります。
(少なくとも1つの記事を公開したライターのみを選択できます)

この例では、結果は次のようになります。

  2     Samantha

SQLコードはここでテストできますhttp://sqlfiddle.com/#!2/7a308

4

2 に答える 2

3

テストされていませんが、近いです:

SELECT w_id, MIN(timestamp) as min_time
from writers w
JOIN articles a on w.w_id = a.w_id
GROUP BY 1
HAVING min_time > 5
于 2012-09-18T21:07:43.687 に答える
0

これは、インライン ビュー (または MySQL が呼び出す「派生テーブル」) を使用して、各ライターの最も早いタイムスタンプを取得する 1 つの方法です。

SELECT w.w_id
     , w.w_name
   --  , e.earliest_timestamp
  FROM writers w
  LEFT
  JOIN ( SELECT a.w_id
              , MIN(a.timestamp) AS earliest_timestamp
           FROM articles a
          GROUP BY a.w_id
       ) e
    ON e.w_id = w.w_id
 WHERE e.earliest_timestamp >= '0000000005'
 ORDER BY w.w_id

これは最も効率的な方法ではないかもしれませんが、クエリだけをインライン ビュー (e としてエイリアス化) で実行して、何が返されるかを確認できます。その後、テーブルと同じように、そのクエリから結果セットを参照できます (いくつかの制限があります)。

(他のアプローチでは、適切なインデックスをより有効に利用できます。)

earliest_timestamp列のデータ型がわかりません。上記の SQL は、文字データ型であると想定しています。文字ではなく整数の場合、WHERE 句は次のようになります。

 WHERE e.earliest_timestamp >= 5
于 2012-09-18T21:22:33.323 に答える