mysql - 获取MySQL中一行的最新状态

标签 mysql aggregate-functions

我有一件非常奇怪的事情要做,但根本不知道该怎么做。这是我的表格及其数据:

+------+-----------+-------------+-------+------------+
| uid  | entity_id | entity_type | state | created    |
+------+-----------+-------------+-------+------------+
| 3913 |      1105 |           1 |     0 | 1340617072 |
| 3913 |      1105 |           1 |     1 | 1340617042 |
| 3913 |      3930 |           1 |     0 | 1340617071 |
| 3913 |      3930 |           1 |     1 | 1340617036 |
+------+-----------+-------------+-------+------------+

created 保存已执行操作的时间戳,state 是操作的状态(关注或取消关注),uid是执行操作的人,entity_id 是正在关注/取消关注的实体 ID。

我正在尝试执行一个查询,获取当前用户关注的所有entity_id。首先我使用的是:

SELECT entity_id FROM follow_objects WHERE uid=? AND entity_type=?

但是我注意到,如果我关注某人然后取消关注他们,我仍然会得到该人的结果,因为它有 2 个条目(状态=1,然后状态=0)。

所以我需要获取具有最新创建列的行,这意味着该操作是最新的。所以我尝试过:

SELECT entity_id FROM follow_objects WHERE uid=? AND entity_type=? group by entity_id HAVING created=MAX(created)

它只返回垃圾数据。我没主意了。有什么帮助吗?

最佳答案

您需要选择按组划分的最大值。您必须将最大值包装在子查询中,并在 entity_id 相等且子查询的最大时间戳等于创建的时间戳的情况下将表自身连接起来。结果是您将获得每个 entity_id 组的顶行数据:

SELECT
    a.entity_id,
    b.state,
    b.created
FROM
    (
        SELECT entity_id, MAX(created) AS max_created
        FROM follow_objects
        WHERE uid = ? AND entity_type = ?
        GROUP BY entity_id
    ) a
INNER JOIN
    follow_objects b ON
        a.entity_id = b.entity_id AND
        a.max_created = b.created

关于mysql - 获取MySQL中一行的最新状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11186949/

相关文章:

mysql - 使用 IN 语句组合两个 SQL 查询

mysql - 获取每个可用日的持续时间

r - 如何使用 R 根据组指定添加列数据?

aggregate-functions - 当代理群体在 Netlogo 中具有相同变量时停止该过程

php - Symfony 查询学说实体

php - localhost 当前无法处理此请求。运行特定代码时出现 HTTP ERROR 500

SQL 查询选择具有不同主题的最新记录

entity-framework - Code first Entity Framework 6.1 自定义聚合函数

mysql - MySQL 存储函数中的十六进制数字文字

postgresql - 将二进制内容附加到 PostgreSQL 数据库中的 bytea 列