我有一张表格如下:
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)
我该如何解决这个问题?我是否需要以某种方式使用嵌套查询?
答案 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
答案 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)”;