【问题标题】:SQL Server : group by consecutiveSQL Server:按连续分组
【发布时间】:2018-04-09 03:14:15
【问题描述】:

我有这张桌子:

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

有什么建议吗?

【问题讨论】:

  • 连续 HteTypeEvenID?他们都是一样的。职业训练局

标签: sql sql-server-2008 group-by


【解决方案1】:

在 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 子句。我添加了order by
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
相关资源
最近更新 更多