我在使用SQL查询时遇到了一些麻烦。这就是为什么我希望你们中的一些人能够帮助我。
我有一个查询,从每个关系ID中选择最新的条目,但我想选择状态不同的最新条目。该表看起来像这样。
+-----------+-------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| kid_id | int(11) | NO | | NULL | |
| status | varchar(50) | NO | | NULL | |
| timestamp | timestamp | NO | | CURRENT_TIMESTAMP | |
+-----------+-------------+------+-----+-------------------+----------------+
我当前的查询看起来像这样。
SELECT *
FROM (
SELECT *
FROM actions
AS a
WHERE date(timestamp) = curdate()
AND timestamp = (
SELECT max(timestamp)
FROM actions
AS b
WHERE a.kid_id = b.kid_id
)
)
AS c
ORDER BY kid_id
结果如下:
id kid_id status timestamp
54 1 Kommet 2010-09-15 00:14:51
57 2 Gået 2010-09-15 00:17:58
56 3 Kommet 2010-09-15 00:15:00
问题是,如果kid_id等于2,我希望看到status =“Kommet”的最新条目....
我想要每个孩子的2条最新记录。第一个记录status =“Kommet”,第二个记录status =“Gået”
事先感谢你的帮助......非常感谢:)
答案 0 :(得分:1)
如果您不想为获取ID而烦恼,那么您可以执行以下操作:
SELECT kid_id, status, MAX(`timestamp`) as `timestamp`
FROM actions
WHERE DATE(`timestamp`) = CURDATE()
GROUP BY kid_id, status
如果你需要id
,那么tou不能只添加到SELECT
列表中,因为GROUP BY
将拉出其中一个匹配的ID以显示在这里,而不是必须一个与MAX(timestamp)
匹配的。