当前位置: 首页 > 面试题库 >

SQL Server 2012中的编号岛

申屠俊发
2023-03-14
问题内容

我需要在SQL Server
2012中对孤岛进行编号。孤岛定义为一组行,其中同一行之间DateFromDateTo之内没有日间空白ItemId

以下数据集:

CREATE TABLE #Ranges (ItemId INT, DateFrom DATETIME, DateTo DATETIME)

INSERT INTO #Ranges VALUES (1,'2015-01-31','2015-02-17')
INSERT INTO #Ranges VALUES (1,'2015-02-18','2015-03-31')
INSERT INTO #Ranges VALUES (1,'2015-04-14','2015-05-21')
INSERT INTO #Ranges VALUES (2,'2015-07-12','2015-07-19')
INSERT INTO #Ranges VALUES (2,'2015-07-20','2015-07-24')
INSERT INTO #Ranges VALUES (2,'2015-07-26','2015-08-02')
INSERT INTO #Ranges VALUES (2,'2015-08-03','2015-08-07')

应该编号如下:

ItemId;  DateFrom;    DateTo;      Number
1;       2015-01-31;  2015-02-17;  1
1;       2015-02-18;  2015-03-31;  1
1;       2015-04-14;  2015-05-21;  2
2;       2015-07-12;  2015-07-19;  3
2;       2015-07-20;  2015-07-24;  3
2;       2015-07-26;  2015-08-02;  4
2;       2015-08-03;  2015-08-07;  4

任何帮助,不胜感激。

此致Przemek


问题答案:

如果您只想对它们进行编号,那么我建议lag()使用一个累加的总和:

select t.*,
       sum(case when datefrom = dateadd(day, 1, prev_dateto
                then 0 else 1
           end) over (order by itemId, datefrom)
from (select t.*,
             lag(dateto) over (partition by itemid order by datefrom) as prev_dateto
      from table t
     ) t;

case确定新的岛屿开始的地方。累计总和只是将此标志求和。



 类似资料:
  • 本文向大家介绍SqlServer2012中First_Value函数简单分析,包括了SqlServer2012中First_Value函数简单分析的使用技巧和注意事项,需要的朋友参考一下 First_Value返回结果集中某列第一条数据的值,跟TOP 1效果一样,比较简单的一个函数 先贴测试用代码 下边使用FIRST_VALUE函数,创建一列新列,返回结果集中第一行的LastName值,这个所谓的

  • 问题内容: 如何使用Java格式化Floats,以便仅在其不为零的情况下显示float组件?例如: 编辑:我忘了提-我仍在使用Java 1.4-对不起! 问题答案: 如果使用DecimalFormat并在模式中指定#,则仅在不为零的情况下显示该值。 看到我的问题如何在Java中格式化数字? 样例代码

  • 我遇到了一个SQL案例的麻烦,问题是我试图运行一个有7个不同列的案例,这些列可以有不同类型的数据(字符串,日期,数字),取决于id。 这意味着在某些id下,列中的行将是字符串,而在其他id下,列中的行将是数字。 我意识到这不是结构化数据库的传统用法,但是这个特定的表有特定的用途,在过去这种方法被认为是有用的。 该案例应该仅在列具有数字时才选择“then”。但是,当我运行它时,我得到一个无效的数字O

  • 问题内容: 我想格式化Struts 2中标签显示的数字。有一个值。我怎样才能做到这一点?我应该使用吗? 或者,也许我必须使用标签并在资源文件中定义我的格式? 问题答案: 您需要使用带。 属性文件: JSP: 该答案说明了如何使用和使用格式掩码。

  • 本文向大家介绍8085微处理器中的BCD编号,包括了8085微处理器中的BCD编号的使用技巧和注意事项,需要的朋友参考一下 很多时候,我们需要在计算机中表示十进制数字,并对这些数字进行算术运算。例如,可能会要求我们对学生在五个不同科目中获得的分数进行总计,显然,分数以十进制表示。 为此,广泛使用了BCD代码。在BCD表示法中,4位用于对一个数字进行编码,因此,两位的信息存储在一个字节中。例如,十进

  • 我正在使用Java中的iText创建一些PDF报告。根据要求,我应该做的是以page_number/page_numbers_in_total的格式对页面进行编号。 然而,内存操作给我的项目带来负担。因此,我不想再翻一遍所有的页面来给它们编号。有没有办法做到这一点?