Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:按顺序分组_Sql_Sql Server 2008_Group By - Fatal编程技术网

SQL Server:按顺序分组

SQL Server:按顺序分组,sql,sql-server-2008,group-by,Sql,Sql Server 2008,Group By,我有这张桌子: 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), (12

我有这张桌子:

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)
我需要按连续的
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
其中返回以下内容:

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

有什么建议吗?

在SQL Server中,您可以通过聚合和行号差异来实现这一点:

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);

我认为理解其工作原理的最好方法是通过观察子查询的结果。您将看到两个值之间的差异如何定义相邻值组。

在SQL Server中,您可以通过行数的聚合和差异来实现这一点:

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);

我认为理解其工作原理的最好方法是通过观察子查询的结果。您将看到两个值之间的差异是如何定义相邻值组的。

非常感谢,这并不完全是我需要的,但已经实现了。。我需要结果由hjvNumeSequ排序,您的查询由HteTypeEvenID@MelodieGauthier . . . 否。原始查询没有按任何内容排序,因为它没有
order by
子句。我按添加了
订单。非常感谢,这不完全是我所需要的,但已经快到了。。我需要结果由hjvNumeSequ排序,您的查询由HteTypeEvenID@MelodieGauthier . . . 否。原始查询没有按任何内容排序,因为它没有
order by
子句。我按
添加了
订单。连续的HteTypeEvenID?他们都一样。vtcconseutivehtetypeevenid?他们都一样。职业训练局