3

次の構造とデータを持つテーブルがあるとします。

id | user_id | created_at
-------------------------
 1 |       7 |    0091942
 2 |       3 |    0000014
 3 |       6 |    0000890
 4 |       6 |    0029249
 5 |       7 |    0000049
 6 |       3 |    0005440
 7 |       9 |    0010108

次の結果を得るには、どのクエリを使用しますか (説明は後述):

id | user_id | created_at
-------------------------
 1 |       7 |    0091942
 6 |       3 |    0005440
 4 |       6 |    0029249
 7 |       9 |    0010108

ご覧のように:

  • 1 行につき 1 行のみuser_idが返されます。
  • 最も高い行がcreated_at返されます。

サブクエリを使用せずにこれを達成する方法はありますか? リレーショナル代数の用語で、この手順が通る名前はありますか?

4

2 に答える 2

2

user_id で最大値とグループを取得できます。

select id,user_id,max(created_at)
from supportContacts
group by user_id
order by id;

これが出力するものです:

ID  USER_ID MAX(CREATED_AT)
1   7   91942
2   3   5440
3   6   29249
7   9   10108

動作デモはこちら

フィドルの例では、created_at フィールドを int として使用していることに注意してください。形式を使用するだけで、違いはありません。

編集:この回答は参照として残しますが、ゴードンが述べたように、彼のクエリは望ましくない結果をもたらすことに注意してください。これを本番環境で使用しないでください。

于 2013-06-11T01:15:44.627 に答える