php - MySQL 选择多个最新值

标签 php mysql

我有一个包含用户统计信息的表格,并且只需要为每个用户选择最新的值:

我使用 php 时间戳来输入日期/上次登录。

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 所有查询的演示

关于php - MySQL 选择多个最新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20490016/

相关文章:

mysql - 如何使用 native 同步函数从 Amazon Aurora MySQL 数据库集群调用 Lambda 函数

javascript - jQuery 表单,存在检查

javascript - 以行作为 ID 和值的表的复制按钮

mysql - 我们可以在 CI 中使用单个 where 子句执行多个查询吗

php - MySQL函数不断返回空白页

mysql - 通过使用 join 语句的查询删除行

php - 在php中执行unlink函数时,Linux中是否出现目录错误

php - 在 php 中识别并获取字符串中的大写单词

php - Android 使用 Volley 库将图片上传到服务器

mysql - 如果不存在则删除