Mysql 如何检查当前行是否是sql查询中最后选定的行?

Mysql 如何检查当前行是否是sql查询中最后选定的行?,mysql,sql,database,Mysql,Sql,Database,我有一个简短的问题!我选择的行数如下所示: SELECT * FROM ... WHERE ... GROUP BY ... 我想向结果集添加另一个字段/属性,比如说last,它确定当前行是否是结果集中的最后一行。我希望结果集如下所示 id name last --- ---- ---- 12 foo false 20 smth false 27 bar true 您必须指定orderby来定义一些行的排序 我相信MySQL的任何解决方案都

我有一个简短的问题!我选择的行数如下所示:

SELECT * FROM ... WHERE ... GROUP BY ...
我想向结果集添加另一个字段/属性,比如说
last
,它确定当前行是否是结果集中的最后一行。我希望结果集如下所示

id    name   last
---   ----   ----
12    foo    false
20    smth   false
27    bar    true
  • 您必须指定
    orderby
    来定义一些行的排序
  • 我相信MySQL的任何解决方案都会有效地意味着您的查询至少执行两次,因此最好在客户端执行
  • 如果您可以运行相同的查询两次,那么执行以下操作

    首先获取最后一行的ID:

    SELECT @LastID := ID 
    FROM ... 
    WHERE ... 
    GROUP BY ...
    ORDER BY ID DESC
    LIMIT 1;
    
    在主查询中使用该ID:

    SELECT * 
        , CASE WHEN ID = @LastID THEN FALSE ELSE TRUE END AS IsLast
    FROM ... 
    WHERE ... 
    GROUP BY ...
    ORDER BY ID ASC;
    
    按原样,如果在运行这两个查询时更新表,则很可能会中断(如果添加或删除行,则记住的ID可能不会成为最后一个ID,除非您采取措施解决此问题)

    当然,您可以将其全部放在一个查询中:

    SELECT 
        *, 
        CASE WHEN ID = LastID THEN FALSE ELSE TRUE END AS IsLast
    FROM 
        YourTable
        CROSS JOIN 
        (
            SELECT ID AS LastID
            FROM YourTable
            ORDER BY ID DESC
            LIMIT 1
        ) AS TableLastID
    ORDER BY ID ASC;
    

    您需要检查MySQL是否足够聪明,可以只运行一次内部
    SELECT LIMIT 1
    ,或者它将对主表的每一行运行它。不过,即使在最好的情况下,查询也会有效地执行两次。

    您需要有一个排序顺序才能确定最后一条记录。使用ASC sort order的MAX()函数或DESC的MIN()函数,您可以测试是否相等,以确定排序顺序字段的值是否为结果集中最后一条记录的值,至少在排序字段为唯一键时是如此。例如,在您的查询中,排序顺序似乎位于ID字段上,该字段通常是唯一的键

    按id ASC从my_表顺序中选择id、field1、field2、id=MAX(id)作为最后一条_记录