我有一个包含用户统计信息的表,只需要为每个用户选择最新值:
我使用php时间戳输入日期/ lastlogin。
stat_id:自动增量
stat_user:登录的用户
stat_count:他登录的次数
stat_lastlogin:他最后一次登录
table: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
可以有无限量的用户。
最终我想让统计数据显示每年每月登录。
答案 0 :(得分:2)
利用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 演示
答案 1 :(得分:1)
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