我有一个简短的问题!我选择的行数一样简单,如下:如何检查当前行是否是sql查询中的最后一个选定行?
SELECT * FROM ... WHERE ... GROUP BY ...
我想另一个字段/属性添加到结果集,让我们说last
,其确定当前行的结果是最后一个组。我希望结果集如下所示?
id name last
--- ---- ----
12 foo false
20 smth false
27 bar true
我有一个简短的问题!我选择的行数一样简单,如下:如何检查当前行是否是sql查询中的最后一个选定行?
SELECT * FROM ... WHERE ... GROUP BY ...
我想另一个字段/属性添加到结果集,让我们说last
,其确定当前行的结果是最后一个组。我希望结果集如下所示?
id name last
--- ---- ----
12 foo false
20 smth false
27 bar true
ORDER BY
定义行的一些排序。如果您可以两次运行相同的查询,则执行如下操作。
获取最后一排的第一个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可能不会成为最后一个),除非您采取措施解决此问题。
当然,你可以把它全部变成一个查询:
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排序顺序的MAX()函数或DESC的MIN()函数,可以测试相等性,以确定排序顺序字段的值是否是结果集中最后一条记录的值,至少当排序字段是独特的钥匙。例如,在您的查询中,它看起来像排序顺序是在ID字段上,这通常是一个唯一的键。 SELECT ID,field1,field2,id = MAX(id)AS last_record FROM my_table ORDER BY id ASC;