2012-08-30 47 views
0

最新記錄我有一個表,看起來像: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) 

我怎樣才能解決這個問題?我是否需要以某種方式使用嵌套查詢?

+1

@ jcho360他希望所有的用戶 - 不只是一個 – alfasin

回答

5

您可以使用子查詢由用戶

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 

得到MAX()日期見SQL Fiddle with demo

+0

我試過類似的東西,但無法得到它。這很好,謝謝! – user387049

+0

這使相同的用戶ID具有相同的日期時出現問題。那時候我們會得到那個用戶ID的兩行。 – Pramod

+0

@Pramod是的,如果用戶有兩個具有相同日期的條目,那麼你會返回2行是正確的。 – Taryn

1

我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

0

這是我的語句類似的情況 $ SQL = 「SELECT INDICADOR_IDIOMA FROM INDICADOR其中INDICADOR_PK =(SELECT MAX(INDICADOR_PK)FROM INDICADOR WHERE INDICADOR_USUARIO = $ PK用戶)」;