MySQL查询每个用户的最新记录

时间:2012-08-30 17:06:46

标签: mysql

我有一张表格如下:

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)

我该如何解决这个问题?我是否需要以某种方式使用嵌套查询?

3 个答案:

答案 0 :(得分: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 with demo

答案 1 :(得分:2)

我100%同意@bluefeet's answer(+1 btw),但在MySQL中它可以缩写如下:

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

sqlfiddle上查看。

供您参考,这称为groupwise maximum

答案 2 :(得分:0)

这是我对类似情况的陈述     $ sql =“SELECT INDICADOR_IDIOMA FROM INDICADOR,其中INDICADOR_PK =(SELECT max(INDICADOR_PK)FROM INDICADOR WHERE INDICADOR_USUARIO = $ pkUser)”;