汇总间隔数据的最佳方法是什么?

与。

表中具有任意间隔(没有日期/时间!)的给定数据定义如下:

START float
END float
VALUE varchar(40)

例如

 START    END    VALUE
 -----    ---    ------
 0        1      Banana
 1        3      Banana
 3        4      Orange
 4        7      Orange
 7        8      Apple
 8        9      Apple
 9       10      Apple
10       15      Apple
20       22      Apple
22       23      Apple
23       28      Banana
28       30      Banana
etc..

如何汇总数据,以便在连续间隔内仅列出一个值。即查询结果应类似于:

START     END    VALUE
-----     ---    ------
 0        3      Banana
 3        7      Orange
 7       15      Apple
20       23      Apple
23       30      Banana

请注意上面的15和20之间的差距。我正在处理大量数据(约50万行),但不经常运行查询。因此效率是非常好的。不用光标就可以做到吗?

(注意:如果使用SQL2008R2,则不能利用较新的功能,如果存在)

谢谢!

阿德里安
WITH TableWithPreviousAndNext AS (
    SELECT CA1.[Previous]
          ,Table1.[Start]
          ,Table1.[End]
          ,CA2.[Next]
          ,Table1.[Value]
          ,(1 + ROW_NUMBER() OVER (PARTITION BY [Value] ORDER BY Table1.[Start])) / 2 AS [Group]
    FROM Table1
         CROSS APPLY (
             SELECT MAX([End]) AS [Previous]
             FROM Table1 AS InnerTable1
             WHERE InnerTable1.[Value] = Table1.[Value]
                   AND InnerTable1.[Start] < Table1.[Start]
         ) AS CA1
         CROSS APPLY (
             SELECT MIN([Start]) AS Next
             FROM Table1 AS InnerTable1
             WHERE InnerTable1.[Value] = Table1.[Value]
                   AND InnerTable1.[Start] > Table1.[Start]
         ) AS CA2
        CROSS APPLY ( -- A little trick to create a 2 row group for isolated rows
            SELECT 1 AS Dummy
          UNION ALL
            SELECT 1
            WHERE ([Previous] IS NULL OR [Previous] <> [Start])
                  AND ([Next] IS NULL OR [Next] <> [End])
        ) AS CA3
    WHERE [Previous] IS NULL -- Remove all but first and last in sequence
          OR [Next] IS NULL
          OR [Previous] <> [Start]
          OR [End] <> [Next]
)
SELECT MIN([Start])
      ,MAX([End])
      ,[Value]
FROM TableWithPreviousAndNext
GROUP BY [Value]
        ,[Group]
ORDER BY MIN(Start)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

汇总Pandas数据框中所有值的最佳方法是什么?

来自分类Dev

在PHP中添加时间间隔的最佳方法是什么?

来自分类Dev

使用MongoDB处理时间间隔的最佳方法是什么

来自分类Dev

清理 POST 数据的最佳方法是什么?

来自分类Dev

汇总此数据框的更好方法是什么?

来自分类Dev

从数据库获取数据的最佳方法是什么?

来自分类Dev

将三个动画间隔一秒钟的最佳方法是什么?

来自分类Dev

解析此数据的最佳Pythonic方法是什么?

来自分类Dev

在C ++中定义全局数据的最佳方法是什么?

来自分类Dev

硬编码此数据的最佳方法是什么。目标C

来自分类Dev

AngularJS中使用Ajax获取数据的最佳方法是什么

来自分类Dev

用python归档数据CD / DVD的最佳方法是什么?

来自分类Dev

构造数据库表的最佳方法是什么?

来自分类Dev

将数据插入联接表的最佳方法是什么

来自分类Dev

迭代所有数据的最佳方法是什么?

来自分类Dev

从表数据中删除列的最佳方法是什么?

来自分类Dev

在视图之间传递数据的最佳方法是什么?

来自分类Dev

引用核心数据实体的最佳方法是什么?

来自分类Dev

在进程之间发送大量数据的最佳方法是什么?

来自分类Dev

检测列表数据结构的最佳方法是什么?

来自分类Dev

在Azure Service Fabric中查询数据的最佳方法是什么?

来自分类Dev

并行从Cassandra读取数据的最佳方法是什么?

来自分类Dev

从存储的多个片中获取NGRX数据的最佳方法是什么

来自分类Dev

变异使用useQuery提取的远程数据的最佳方法是什么

来自分类Dev

在Cassandra中迁移数据的最佳方法是什么

来自分类Dev

组合相似数据框的最佳方法是什么

来自分类Dev

组织地理参考数据的最佳方法是什么?

来自分类Dev

记录和查询大量交易数据的最佳方法是什么?

来自分类Dev

在NodeJS中处理数据的最佳方法是什么?

Related 相关文章

  1. 1

    汇总Pandas数据框中所有值的最佳方法是什么?

  2. 2

    在PHP中添加时间间隔的最佳方法是什么?

  3. 3

    使用MongoDB处理时间间隔的最佳方法是什么

  4. 4

    清理 POST 数据的最佳方法是什么?

  5. 5

    汇总此数据框的更好方法是什么?

  6. 6

    从数据库获取数据的最佳方法是什么?

  7. 7

    将三个动画间隔一秒钟的最佳方法是什么?

  8. 8

    解析此数据的最佳Pythonic方法是什么?

  9. 9

    在C ++中定义全局数据的最佳方法是什么?

  10. 10

    硬编码此数据的最佳方法是什么。目标C

  11. 11

    AngularJS中使用Ajax获取数据的最佳方法是什么

  12. 12

    用python归档数据CD / DVD的最佳方法是什么?

  13. 13

    构造数据库表的最佳方法是什么?

  14. 14

    将数据插入联接表的最佳方法是什么

  15. 15

    迭代所有数据的最佳方法是什么?

  16. 16

    从表数据中删除列的最佳方法是什么?

  17. 17

    在视图之间传递数据的最佳方法是什么?

  18. 18

    引用核心数据实体的最佳方法是什么?

  19. 19

    在进程之间发送大量数据的最佳方法是什么?

  20. 20

    检测列表数据结构的最佳方法是什么?

  21. 21

    在Azure Service Fabric中查询数据的最佳方法是什么?

  22. 22

    并行从Cassandra读取数据的最佳方法是什么?

  23. 23

    从存储的多个片中获取NGRX数据的最佳方法是什么

  24. 24

    变异使用useQuery提取的远程数据的最佳方法是什么

  25. 25

    在Cassandra中迁移数据的最佳方法是什么

  26. 26

    组合相似数据框的最佳方法是什么

  27. 27

    组织地理参考数据的最佳方法是什么?

  28. 28

    记录和查询大量交易数据的最佳方法是什么?

  29. 29

    在NodeJS中处理数据的最佳方法是什么?

热门标签

归档