如何解决如何分区和将某些行分类为组
我有一个看起来像这样的数据集:
R_E 2020-08-20 16:37:37.693
R_S 2020-08-20 16:37:25.520
SE_E 2020-08-20 16:37:24.107
SA_E 2020-08-20 16:37:21.900
SA_S 2020-08-20 16:37:06.270
SE_R 2020-08-20 06:00:00.000
SE_P 2020-08-20 05:00:00.000
SE_R 2020-08-19 18:00:00.000
SE_P 2020-08-19 17:00:00.000
SE_S 2020-08-19 16:37:23.283
我想分配一个行号,以使row = 1是基于时间列的最后一行。但是,棘手的部分是我希望如何分组。首先,我需要查询将下划线之前的所有内容视为一个组。因此,例如,“ SE”有6行。这应该是第一种分组方法。然后,我想将以'_S'和'_E'结尾的行分组为一个组,以'_P'和'_R'结尾的行分组为另一组。如何在查询中编写row_number()函数,使最终结果如下所示:
R_E 2020-08-20 16:37:37.693 1
R_S 2020-08-20 16:37:25.520 2
SE_E 2020-08-20 16:37:24.107 1
SA_E 2020-08-20 16:37:21.900 1
SA_S 2020-08-20 16:37:06.270 2
SE_R 2020-08-20 06:00:00.000 1
SE_P 2020-08-20 05:00:00.000 2
SE_R 2020-08-19 18:00:00.000 3
SE_P 2020-08-19 17:00:00.000 4
SE_S 2020-08-19 16:37:23.283 2
据我所知:
select
*,row_number() over(partition by substring(j.Uf_Status,1,charindex('_',j.Uf_Status) - 1) order by j.Uf_Time desc) lastrows
from ...
我不知道如何进行第二次分组。
解决方法
如果我理解正确,则可以使用case
表达式:
row_number() over (partition by left(j.Uf_Status,charindex('_',j.Uf_Status) - 1),(case when j.uf_status like '%[SE]' then 1
when j.uf_status like '%[PR]' then 2
else 3
end)
order by j.Uf_Time desc
) as lastrows
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。