需要在SQL Server 2008中使用CTC来实现业务需求

2024-03-29

对小规模的实施会有很大的帮助SP以满足以下要求。

业务规则是:

EndDate 应该是下一个规则的开始日期,否则规则不应该是 视为连续的,并将被视为其他规则系列,如 在下面的示例中显示有两个系列,因为第四个系列 它已经打破了记录。

RuleId  Name    StartDate           EndDate
2       TP1     1/1/2015 00.00.00   1/31/2015 00.00.00
2       TP1     1/31/2015 00.00.00  2/28/2015 00.00.00
2       TP1     2/28/2015 00.00.00  3/15/2015 00.00.00
2       TP1     3/18/2015 00.00.00  3/28/2015 00.00.00
2       TP1     3/28/2015 00.00.00  4/30/2015 00.00.00
2       TP1     4/30/2015 00.00.00  5/5/2015 00.00.00

结果应该是:

RuleId  Name    StartDate           EndDate
2       TP1     1/1/2015 00.00.00   3/15/2015 00.00.00
2       TP1     3/18/2015 00.00.00  5/5/2015 00.00.00

For Sql Server 2012+:

with cte1 as (select *,
case when lag(enddate) over(partition by ruleid order by startdate) = startdate 
     then 0 else 1 end as b
from t),
cte2 as(select *, sum(b) over(partition by ruleid order by startdate) as s
from cte1)
select ruleid, name, min(startdate), max(enddate) from cte2
group by s, ruleid, name

Fiddle http://sqlfiddle.com/#!6/aadf4/1 http://sqlfiddle.com/#!6/aadf4/1

对于 Sql Server 2008 使用:

WITH    cte1
          AS ( SELECT   * ,
                        ROW_NUMBER() OVER ( ORDER BY startdate ) rn ,
                        CASE WHEN ( SELECT  MAX(enddate)
                                    FROM    @t ti
                                    WHERE   ti.ruleid = t.ruleid
                                            AND ti.startdate < t.startdate
                                  ) = startdate THEN 0
                             ELSE 1
                        END AS b
               FROM     @t t
             ),
        cte2
          AS ( SELECT   * ,
                        ( SELECT    SUM(b)
                          FROM      cte1 c11
                          WHERE     c11.ruleid = c1.ruleid
                                    AND c11.rn <= c1.rn
                        ) bb
               FROM     cte1 c1
             )
    SELECT  bb ,
            ruleid ,
            name ,
            MIN(startdate) ,
            CASE WHEN COUNT(*) = COUNT(enddate) THEN MAX(enddate)
                 ELSE NULL
            END
    FROM    cte2
    GROUP BY bb ,
            ruleid ,
            name
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要在SQL Server 2008中使用CTC来实现业务需求 的相关文章

随机推荐

  • Nginx:代理传递/代理重定向到闪亮的 Web 应用程序

    我们正在尝试更新我们的内部服务器基础设施 并通过 Nginx 服务器代理对我们的 R闪亮网络服务器的所有访问 我能够从闪亮的服务器获得响应 但无法通过 Nginx 服务器获取 css js 等相关文件 Setup 2 个 docker 容器
  • Git:将子文件夹从存储库获取到新存储库而不丢失历史记录

    我有一个git具有多个分支的应用程序的存储库 源代码树由几个目录组成 例如 main folder gt git gt dir0 gt dir1 gt dir2 不幸的是 从开发之初我就没有使用git submodules nor git
  • “值”应该是 Kendo Angular DatePicker 中有效的 JavaScript Date 实例

    kendo DatePicker 的绑定出现错误 值 应该是有效的 JavaScript Date 实例 我在 asp core 中获取学生的 Web api 是 HttpGet Route api master id public Jso
  • 循环遍历指定文件夹中的所有 Excel 文件并从特定单元格中提取数据的代码

    我有大约 50 个左右的 Excel 工作簿 需要从中提取数据 我需要从特定单元格 特定工作表中获取数据并编译成一个数据集 最好是另一个 Excel 工作簿 我正在寻找一些 VBA 以便可以将结果编译到我用来运行代码的工作簿中 因此 我需要
  • iOS9 的 UILocalNotification 问题

    从iOS9开始 本地通知无法正常工作 有时用户会收到通知 有时则不会 我的通知每天都会重复 知道什么可能导致这个问题吗 我看到一些帖子说iOS9有一个bug 但我不确定这就是原因 这是一段代码 NSDate alarmDate date d
  • 如何保证两个div的高度相同?

    假设我在包装器中有 2 个并排的 div div div div div div div primary width 50 float left secondary width 50 如何确保 div secondary 始终与 div m
  • 正则表达式避免了Java中不必要的回溯

    你好 我是正则表达式世界的新手 我想在 Java 测试字符串中提取时间戳 位置和 id str 字段 20110302140010915 user is translator false show all inline media fals
  • postgresql 删除重复行

    我只想删除具有相同名称的重复行 但我想保留这些行的值高于其他行 问题是 当我执行代码时 所有重复的行都被删除 并且没有一个被保留 为什么这样 SELECT name from select name ROW NUMBER OVER PART
  • 反应路由器中的查询字符串

    我正在尝试使用查询字符串设置路由路径 内容如下 www mywebsite com results query1 query1 query2 query2 query3 query3 我会像这样过渡到 结果 组件
  • 锚链接在 iPad 上无法正常工作

    我们在 iPad 上遇到了固定元素的问题 您可以在这里查看我们的布局 http cibology edoardobiasini it http cibology edoardobiasini it The position fixed右侧的
  • 十六进制浮点文字中的十六进制“E/e”与指数形式的“E/e”如何区分?

    在 C 中 如果我想要一个浮点文字 x 为十六进制形式并具有指数值 它将表示为 float x 0X2aE 10 其中0x用于表示它是十六进制的 2a用于表示十六进制字符 E 10用于表示十的10次方的数字 然而 编译器是否知道它不是 2a
  • 为什么当我在 switch 语句中为每个枚举常量都有情况时,我仍然必须提供默认值吗? [复制]

    这个问题在这里已经有答案了 我试图在 Java 中声明一个枚举 并在 switch 语句中使用该类型的变量 其中涵盖了该类型枚举常量的所有可能情况 enum MyEnum FOO BAR private static void test M
  • 按版本对字符串列表进行排序

    我有一个字符串列表 每个字符串都遵循模式 Path UpdateTo Version Order 我需要对列表进行排序 使最低版本号位于顶部 如果存在多个具有相同版本号的文件 则附加一个可选的顺序参数 如果任何字符串上存在订单 那么它应该出
  • 以 cm 为单位调整图像大小 C#

    我有一个要求 要求提供 10 X 6 88 厘米的图像 我知道我不能简单地将厘米转换为像素 因为一个像素大小取决于用户显示分辨率 我想知道是否有办法调整图像大小以达到该尺寸 以厘米为单位 我还需要保留图像扩展名 例如 无法将其转换为 pdf
  • 在hive中如何将字符串转换为数组?

    我使用的是蜂巢1 1 hive gt select country from releases limit 1 OK us ca fr 目前 国家在 hive 中是字符串类型 如何将其转换为数组 String 我尝试了下面的方法 但它抛出错
  • Spring MVC 中的嵌套异常处理

    我收到以下错误 org springframework web util NestedServletException 请求处理失败 嵌套异常是 java lang NullPointerException 为了在控制器中处理这个问题 我使
  • 如何将钩子添加到 uberjar 进程中(使用 lein 构建)

    我想向 uberjar 进程添加一个钩子 具体示例是将 maxmind geoip dat 文件下载到资源文件夹中 以便每次部署时都会将更新版本捆绑到 jar 中 示例 建议表示赞赏 谢谢 我建议创建一个调用 uberjar 的自定义 le
  • 将查询结果从 BigQuery 导出到 Postgres

    我正在尝试导出 BigQuery 中的查询结果 并将数据导入 Postgres 数据可能多达 2 5 亿条记录 约 26Gb 选项1 将查询结果保存到临时表 将表导出为 csv 批量更新插入到 postgres 这会很慢 选项2 以某种方式
  • EhCache和数据库刷新

    我正在使用 Spring 和 ehcache 使用查询将数据填充到缓存中 此过程必须每 10 分钟发生一次 有配置可以设置吗 提前致谢 通常 ehCache 将用于给出一个 ttl 以自动使缓存失效 根据我从您的问题中收集到的信息 您要求每
  • 需要在SQL Server 2008中使用CTC来实现业务需求

    对小规模的实施会有很大的帮助SP以满足以下要求 业务规则是 EndDate 应该是下一个规则的开始日期 否则规则不应该是 视为连续的 并将被视为其他规则系列 如 在下面的示例中显示有两个系列 因为第四个系列 它已经打破了记录 RuleId