识别别名列字段中一组不同数据的最后一行

Identify the last row of a distinct set of data in the field for an Alias ​Column

我如何识别别名列字段中一组不同数据的最后一行(以某种方式发出信号,例如“1”)。

对于这个例子,我需要知道,订购的GROUP“汽车、颜色、饮料、水果”何时结束。

检查我在此图像上的预期结果:

我的基本查询:

SELECT * FROM `MY_DB` ORDER BY `ITEM`, `GROUP` ASC

作为初学者:SQL table 的行是 无序的 。行没有固有的顺序。为了使您的问题有意义,您需要一个列来定义每组中行的顺序 - 我假设 id.

然后:在MySQL 8.0中,一个选项使用window函数:

select t.*,
    (row_number() over(partition by grp order by id desc) = 1) as last_group_flag
from mytable t

在早期版本中,您可以使用子查询:

select t.*,
    (id = (select max(t1.id) from mytable t1 where t1.grp = t.grp)) as last_group_flag
from mytable t

注意:group 是语言关键字,因此不是列名的好选择。我在查询中使用了 grp

您需要按 item 列排序并按 group column 排序以查找每个不同 group 列的最后一条记录。

使用row_number如下:

select t.*,
       Case when row_number() over(partition by group
                                   order by item desc) = 1 
            then 1 else 0 end as last_group_flag
from your_table t