1

次のようなテーブルがあります。

id_primary, id_user, amount, date

次のようなエントリがある場合:

1, 1, 5, 2012-01-05
2, 1, 8, 2012-01-15
3, 1, 17, 2012-03-30
4, 2, 3, 2012-01-18
5, 2, 9.5, 2012-01-31

各id_userの最新の結果を(時系列で)取得するために複数のクエリを試しましたが、何があっても最初の行を利用できるようです。たとえば、この例のテーブルから私が望むものは次のようになります。

3, 1, 17, 2012-03-30
5, 2, 9.5, 2012-01-31

私の最近の試みは次のようなものでした:

SELECT a.* FROM table a GROUP BY a.id_user HAVING MAX(a.date)

どうすればこれを修正できますか? ネストされたクエリを何らかの方法で使用する必要がありますか?

4

3 に答える 3

5

サブクエリを使用して、MAX()ユーザーごとに日付を取得できます

select t1.id_primary,
  t1.id_user,
  t1.amount,
  t2.maxdate
from yourtable t1
inner join
(
  select max(date) maxdate, id_user
  from yourtable
  group by id_user
) t2
  on t1.id_user = t2.id_user
  and t1.date = t2.maxdate

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

于 2012-08-30T17:10:08.553 に答える
2

@bluefeet の回答(+1 btw)に 100% 同意しますが、MySQL では次のように省略できます。

SELECT yourtable.* FROM yourtable NATURAL JOIN (
  SELECT id_user, MAX(date) date FROM yourtable GROUP BY id_user
) t

sqlfiddleで参照してください。

参考までに、これはgroupwise maximumとして知られています。

于 2012-08-30T17:26:41.143 に答える