识别别名列字段中一组不同数据的最后一行
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
我如何识别别名列字段中一组不同数据的最后一行(以某种方式发出信号,例如“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