[英]MySQL Select Multiple latest Values
我有一個包含用戶統計信息的表,只需要為每個用戶選擇最新值:
我使用php時間戳輸入日期/ lastlogin。
stat_id:自動遞增
stat_user:登錄的用戶
stat_count:他登錄的次數
stat_lastlogin:他上次登錄
表格:user_stats
stat_id | stat_user | stat_count | stat_lastlogin
---------------------------------------------------------
1 | Admin | 1 | 1386661327
2 | User | 1 | 1386661340
3 | Guest | 1 | 1386661358
4 | Admin | 2 | 1386662383
5 | Guest | 2 | 1386663794
6 | Admin | 3 | 1386663806
7 | Super | 1 | 1386663812
所以我想要實現的是顯示輸出時的以下內容:
stat_id | stat_user | stat_count | stat_lastlogin
---------------------------------------------------------
2 | User | 1 | 1386661340
5 | Guest | 2 | 1386663794
6 | Admin | 3 | 1386663806
7 | Super | 1 | 1386663812
可以有無限數量的用戶。
最終,我希望統計數據顯示每年的每月登錄數。
利用MySQL非標准GROUP BY
擴展,您可以執行
SELECT stat_id, stat_user, stat_count, stat_lastlogin
FROM
(
SELECT stat_id, stat_user, stat_count, stat_lastlogin
FROM table1
ORDER BY stat_lastlogin DESC
) q
GROUP BY stat_user
或以更標准的方式
SELECT t.stat_id, t.stat_user, t.stat_count, t.stat_lastlogin
FROM
(
SELECT stat_user, MAX(stat_lastlogin) stat_lastlogin
FROM table1
GROUP BY stat_user
) q JOIN table1 t
ON q.stat_user = t.stat_user
AND q.stat_lastlogin = t.stat_lastlogin
ORDER BY stat_user
或者,如果stat_lastlogin
未更新(意味着stat_id
越高,則最近的記錄越多)
SELECT t.stat_id, t.stat_user, t.stat_count, t.stat_lastlogin
FROM
(
SELECT MAX(stat_id) stat_id
FROM table1
GROUP BY stat_user
) q JOIN table1 t
ON q.stat_id = t.stat_id
ORDER BY stat_user
輸出:
| STAT_ID | STAT_USER | STAT_COUNT | STAT_LASTLOGIN | |---------|-----------|------------|----------------| | 6 | Admin | 3 | 1386663806 | | 5 | Guest | 2 | 1386663794 | | 7 | Super | 1 | 1386663812 | | 2 | User | 1 | 1386661340 |
這是所有查詢的SQLFiddle演示
你可以試試這個嗎?
SELECT user_stat.*
FROM user_stat INNER JOIN
(
SELECT stat_user, MAX(stat_lastlogin) as ll
FROM user_stats
GROUP BY stat_user
) x ON user_stat.stat_user = x.stat_user AND user_stat.stat_lastlogin = x.ll
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.