需要MySQL帮助吗

需要MySQL帮助吗,mysql,greatest-n-per-group,sql,Mysql,Greatest N Per Group,Sql,我在sql查询方面遇到了一些问题。这就是为什么我希望你们中的一些人能够帮助我 我有一个查询,它从每个关系id中选择最新的条目,但我想选择状态不同的最新条目。这张桌子看起来像这样 +-----------+-------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +----

我在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
我当前的查询如下所示

+-----------+-------------+------+-----+-------------------+----------------+
| 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
标记。这种类型的查询在堆栈溢出时已经被回答了几十次。去读一些解决方案。非常感谢这对我帮助很大。我做了一些小的修改,但基本上解决了我的问题:)