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

我 100% 同意@bluefeet 的回答(+1 顺便说一句),但在 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 回答
0

这是我针对类似情况的声明 $sql = "SELECT INDICADOR_IDIOMA FROM INDICADOR where INDICADOR_PK=(SELECT max(INDICADOR_PK) FROM INDICADOR WHERE INDICADOR_USUARIO=$pkUser)";

于 2013-04-11T15:34:01.023 回答