我有一件非常奇怪的事情要做,但根本不知道该怎么做。这是我的表格及其数据:
+------+-----------+-------------+-------+------------+
| 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/