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
来定义一些行的排序李>
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)作为最后一条_记录