需要MySQL帮助吗
我在sql查询方面遇到了一些问题。这就是为什么我希望你们中的一些人能够帮助我 我有一个查询,它从每个关系id中选择最新的条目,但我想选择状态不同的最新条目。这张桌子看起来像这样需要MySQL帮助吗,mysql,greatest-n-per-group,sql,Mysql,Greatest N Per Group,Sql,我在sql查询方面遇到了一些问题。这就是为什么我希望你们中的一些人能够帮助我 我有一个查询,它从每个关系id中选择最新的条目,但我想选择状态不同的最新条目。这张桌子看起来像这样 +-----------+-------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +----
+-----------+-------------+------+-----+-------------------+----------------+
| 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
我当前的查询如下所示
+-----------+-------------+------+-----+-------------------+----------------+
| 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”的最新条目
我要每个孩子的两张最新唱片。第一条记录的位置为status=“Kommet”,第二条记录的位置为status=“Gået”
事先非常感谢您的帮助。。。非常感谢:)如果您不想麻烦获取id,那么您可以运行以下操作:
SELECT kid_id, status, MAX(`timestamp`) as `timestamp`
FROM actions
WHERE DATE(`timestamp`) = CURDATE()
GROUP BY kid_id, status
如果您需要
id
,tou不能只将其添加到选择列表中,因为GROUP BY
会拉取其中一个匹配的id显示在这里,而不一定是与MAX(timestamp)
匹配的id。我已经添加了best-n-per-GROUP
标记。这种类型的查询在堆栈溢出时已经被回答了几十次。去读一些解决方案。非常感谢这对我帮助很大。我做了一些小的修改,但基本上解决了我的问题:)