Mysql 从分组中抓取第一行

Mysql 从分组中抓取第一行,mysql,sql,Mysql,Sql,离开我的最后一个问题: 在每个分组中,我只想获取具有最高“步长”值的行 这是我们在上一个问题中提出的问题: SELECT a.*, b.* FROM ( SELECT request_id FROM tableA GROUP BY request_id HAVING MAX(page_views) <= 0 AND MAX(step) <= 2 ) AS sumQ INNER JOIN tableA AS a ON sumQ.request_id =

离开我的最后一个问题:

在每个分组中,我只想获取具有最高“步长”值的行

这是我们在上一个问题中提出的问题:

SELECT a.*, b.*
FROM (
    SELECT request_id
    FROM tableA
    GROUP BY request_id
    HAVING MAX(page_views) <= 0 AND MAX(step) <= 2
) AS sumQ
INNER JOIN tableA AS a ON sumQ.request_id = a.request_id
INNER JOIN tableB AS b ON a.request_id = b.id
这正是我想要的,然而,我意识到在每个分组中,按请求_id,我只需要具有最高“步长”值的行。如何修改现有查询以仅返回:

id   request_id   page_views   step   name          phone
----------------------------------------------------------------
 9   3            0            1      Jacob Clark   434-343-434
12   4            0            2      Alex Smith    222-112-2112
?然后在逻辑中包括步骤:

SELECT a.*, b.*
FROM (SELECT request_id, MAX(step) as maxstep
      FROM tableA
      GROUP BY request_id
      HAVING MAX(page_views) <= 0 AND MAX(step) <= 2
     ) sumQ INNER JOIN
     tableA a
     ON sumQ.request_id = a.request_id AND
        sumQ.maxstep = a.step INNER JOIN
     tableB b
     ON a.request_id = b.id;
您是否尝试过在步骤字段中设置一个ORDER BY,然后获得最高记录

SELECT a.*, b.*
FROM (
    SELECT TOP 1 request_id
        FROM tableA
        GROUP BY request_id
        HAVING MAX(page_views) <= 0 AND MAX(step) <= 2
        ORDER BY step DESC
) AS sumQ
INNER JOIN tableA AS a ON sumQ.request_id = a.request_id
INNER JOIN tableB AS b ON a.request_id = b.id

这只会给出OP 1请求id,但他希望每个请求id都能达到最高记录。Matt是正确的。这不会给我我想要的。回答得好。Kyle这个答案需要注意的一点是,如果一个请求id共享同一个MAXstep时有多条记录,则仍然会有多条记录。如果你只想随机选择其中的一个,你需要使用一个行数,我相信Gordon肯定知道这是否是你想要的。如果每个组有多个具有相同请求id的行,实际上也没关系。
SELECT a.*, b.*
FROM (
    SELECT TOP 1 request_id
        FROM tableA
        GROUP BY request_id
        HAVING MAX(page_views) <= 0 AND MAX(step) <= 2
        ORDER BY step DESC
) AS sumQ
INNER JOIN tableA AS a ON sumQ.request_id = a.request_id
INNER JOIN tableB AS b ON a.request_id = b.id