SQL Server:按组连续

编程入门 行业动态 更新时间:2024-10-28 08:24:21
本文介绍了SQL Server:按组连续的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

CREATE TABLE yourtable ( HevEvenementID INT, HjvNumeSequJour INT, HteTypeEvenID INT ); (12074,1,66),(12074,2,66),(12074,3,5),(12074,4,7), 插入到您所需的值),(12074,5,17),(12074,6,17),(12074,7,17​​),(12074,8,17),(12074,9,17),(12074,10,17) ,5)

我需要连续编组 HteTypeEvenID 。现在我正在这样做:

SELECT HevEvenementID, MAX(HjvNumeSequJour)AS HjvNumeSequJour, HteTypeEvenID FROM (SELECT HevEvenementID, HjvNumeSequJour, HteTypeEvenID FROM yourtable y)AS s GROUP BY HevEvenementID,HteTypeEvenID ORDER BY HevEvenementID,HjvNumeSequJour,HteTypeEvenID

$ b

HevEvenementID HjvNumeSequJour HteTypeEvenID ------------ --------------------------------- 12074 2 66 12074 4 7 12074 9 17 12074 10 5

我需要连续分组 HteTypeEvenID ,得到这个结果:

HevEvenementID HjvNumeSequJour HteTypeEvenID --- ----------------------- -------------------- 12074 2 66 12074 3 5 12074 4 7 12074 9 17 12074 10 5

有什么建议?

<$ c $ (选择t。*, row_number()over(由HjvNumeSequJour分区,按HevEvenementID顺序划分)为seqnum_1, row_number()选择HevEvenementID,HteTypeEvenID, max(HjvNumeSequJour) ()分区(由HevEvenementID分区,HteTypeEvenID由HjvNumeSequJour分区)作为seqnum_2 来自yourtable t )t 分组由HevEvenementID,HteTypeEvenID,(seqnum_1 - seqnum_2) order by max (HjvNumeSequJour);

我认为理解这种工作方式的最好方法是盯着子查询的结果。您将看到两个值之间的差异是如何定义相邻值组的。

I have this table:

CREATE TABLE yourtable ( HevEvenementID INT, HjvNumeSequJour INT, HteTypeEvenID INT ); INSERT INTO yourtable VALUES (12074, 1, 66), (12074, 2, 66), (12074, 3, 5), (12074, 4, 7), (12074, 5, 17), (12074, 6, 17), (12074, 7, 17), (12074, 8, 17), (12074, 9, 17), (12074, 10, 5)

I need to group by consecutive HteTypeEvenID. Right now I am doing this:

SELECT HevEvenementID, MAX(HjvNumeSequJour) AS HjvNumeSequJour, HteTypeEvenID FROM (SELECT HevEvenementID, HjvNumeSequJour, HteTypeEvenID FROM yourtable y) AS s GROUP BY HevEvenementID, HteTypeEvenID ORDER BY HevEvenementID,HjvNumeSequJour, HteTypeEvenID

which returns this:

HevEvenementID HjvNumeSequJour HteTypeEvenID --------------------------------------------- 12074 2 66 12074 4 7 12074 9 17 12074 10 5

I need to group by consecutive HteTypeEvenID, to get this result:

HevEvenementID HjvNumeSequJour HteTypeEvenID ---------------------------------------------- 12074 2 66 12074 3 5 12074 4 7 12074 9 17 12074 10 5

Any suggestions?

解决方案

In SQL Server, you can do this with aggregation and difference of row numbers:

select HevEvenementID, HteTypeEvenID, max(HjvNumeSequJour) from (select t.*, row_number() over (partition by HevEvenementID order by HjvNumeSequJour) as seqnum_1, row_number() over (partition by HevEvenementID, HteTypeEvenID order by HjvNumeSequJour) as seqnum_2 from yourtable t ) t group by HevEvenementID, HteTypeEvenID, (seqnum_1 - seqnum_2) order by max(HjvNumeSequJour);

I think the best way to understand how this works is by staring at the results of the subquery. You will see how the difference between the two values defines the groups of adjacent values.

更多推荐

SQL Server:按组连续

本文发布于:2023-10-24 06:07:11,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:SQL   Server

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!