同一数据集的日期范围

首先

我正在尝试建立一个SQL查询,该查询将为我提供价格相同的日期的日期范围。如果价格出现突破,我希望能在新的一行看到它。即使一个月中的某个时间有相同的价格,但是如果在某个时间之间价格有变化,我希望将其视为具有特定日期范围的两个单独的行。

样本数据:

Date    Price
1-Jan   3.2
2-Jan   3.2
3-Jan   3.2
4-Jan   3.2
5-Jan   3.2
6-Jan   3.2
7-Jan   3.2
8-Jan   3.2
9-Jan   3.5
10-Jan  3.5
11-Jan  3.5
12-Jan  3.5
13-Jan  3.5
14-Jan  4.2
15-Jan  4.2
16-Jan  4.2
17-Jan  3.2
18-Jan  3.2
19-Jan  3.2
20-Jan  3.2
21-Jan  3.2
22-Jan  3
23-Jan  3
24-Jan  3
25-Jan  3
26-Jan  3
27-Jan  3
28-Jan  3
29-Jan  3.5
30-Jan  3.5
31-Jan  3.5

所需结果:

Price   Date Range
3.2     1-8
3.5     9-13
4.2     14-16
3.2     17-22
3       22-28
3.5     29-31
PerformanceDBA

非关系解决方案

我认为其他答案都不正确。

  • GROUP BY 不会工作

  • 使用ROW_NUMBER()强制将数据放入物理的“记录归档系统”结构中,然后将其作为物理记录进行处理。以巨大的性能代价。当然,为了写这样的代码,它迫使你在RFS而不是关系思维的条款。

  • 使用CTE是相同的。遍历数据,尤其是不变的数据。费用略有不同。

  • 游标绝对是错误的,原因有很多。(a)游标需要代码,并且您已请求一个视图(b)游标放弃了集处理引擎,并恢复为逐行处理。同样,不是必需的。如果我的任何团队中的开发人员都在关系数据库(即非记录归档系统)上使用了游标或临时表,那么我会射击它们。

关系解决方案

  1. 您的数据是关系型,逻辑性的,两个给定的数据列就足够了。

  2. 当然,我们有以形成一视图(派生关系),以获得所需的报告,但由纯进行选择,这是处理(将其转换为一个完全不同的文件,这是物理的,然后处理所述文件;或者临时表;或工作表;或CTE;或ROW_Number();等)。

  3. 与有一个议程的“理论家”的哀叹相反,SQL可以很好地处理关系数据。而您的数据就是关系型的。

因此,请保持“关系”心态,数据的“关系”视图和集合处理心态。可以使用单个SELECT来满足关系数据库上的每个报告要求。无需退回1970年以前的ISAM文件处理方法。

我将假设主键(给出关系行唯一性的列集)为Date,,根据给出的示例数据,数据类型为DATE.

试试这个:

    CREATE VIEW MyTable_Base_V          -- Foundation View
    AS
        SELECT  Date,
                Date_Next,
                Price
            FROM (
            -- Derived Table: project rows with what we need
            SELECT  Date,
                    [Date_Next] = DATEADD( DD, 1, O.Date ),
                    Price,
                    [Price_Next] = (

                SELECT Price            -- NULL if not exists
                    FROM MyTable
                    WHERE Date = DATEADD( DD, 1, O.Date )
                    )

                FROM MyTable MT

                ) AS X
            WHERE Price != Price_Next   -- exclude unchanging rows
    GO

    CREATE VIEW MyTable_V               -- Requested View
    AS
        SELECT  [Date_From] = (
            --  Date of the previous row
            SELECT MAX( Date_Next )     -- previous row
                FROM MyTable_V
                WHERE Date_Next < MT.Date
                ),

                [Date_To] = Date,       -- this row
                Price
            FROM MyTable_Base_V MT
    GO

    SELECT  *
        FROM MyTable_V
    GO

通用方法

当然,这是一种方法,因此它是通用的,它可以被用来确定From_To_任何数据范围(在此,a的Date范围)的基础上的任何数据变化(在这里,在一变化Price)。

在这里,您Dates是连续的,因此确定Date_Next很简单:将递增Date1天。如果PK在增加但连续(例如DateTimeTimeStamp或其他某个键),则将派生表更改X为:

    -- Derived Table: project rows with what we need
    SELECT  DateTime,
            [DateTime_Next] = (
            -- first row > this row
        SELECT  TOP 1
                DateTime                -- NULL if not exists
            FROM MyTable
            WHERE DateTime > MT.DateTime
            ),

            Price,
            [Price_Next] = (
            -- first row > this row
        SELECT  TOP 1
                Price                   -- NULL if not exists
            FROM MyTable
            WHERE DateTime > MT.DateTime
            )

        FROM MyTable MT

享受。

请随时发表评论,提出问题等。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

同一数据集的日期范围

来自分类Dev

有效/简单地对同一数据集的不同范围进行计数

来自分类Dev

星火:在同一数据集排减值

来自分类Dev

Matplotlib同一数据集的多个比例

来自分类Dev

匹配同一数据框中的最近日期

来自分类Dev

遍历同一数组的多个范围

来自分类Dev

如何从不同页面抓取数据并分配给同一数据集?

来自分类Dev

根据同一数据集中2个表之间的关系创建表或数据集

来自分类Dev

SQL - 将来自同一数据集的数据与特定列中的匹配值分开

来自分类Dev

在一个查询中显示来自同一数据集的不同值

来自分类Dev

Laravel 数据库返回的日期时间与同一数据库中的记录不同

来自分类Dev

饼图布局在Firefox和Chrome上针对同一数据集产生不同的顺序

来自分类Dev

R-在同一数据集上使用函数n次

来自分类Dev

在同一数据库上使用多个FluentMigrator程序集

来自分类Dev

小数精度沿同一数据集的工作方式不同

来自分类Dev

如何使用Apache Flink在同一数据集上计算两个和

来自分类Dev

保存的随机森林模型在同一数据集上产生不同的结果

来自分类Dev

跨同一数据集的行的SSRS操作-子集-查找

来自分类Dev

Caffe 如何在原型中为同一数据集缩放和设置均值

来自分类Dev

线性回归 - 将预测值附加到同一数据集

来自分类Dev

如果值在同一列和同一数据框中的窗口范围内,则创建新列

来自分类Dev

为什么我们可以在同一范围内对同一数据有多个可变引用?

来自分类Dev

同一数据框中具有相同日期但不同小时的多个文件

来自分类Dev

同一数据透视表中的“计数不同”和最小值(日期)?

来自分类Dev

统一数据的“日期时间”格式

来自分类Dev

如何使用解析窗口SQL函数在同一数据集的行组中查找id值

来自分类Dev

MongoDB:如何在同一数据库中搜索多个集合并返回混合结果集?

来自分类Dev

MongoDB:如何在同一数据库中搜索多个集合并返回混合结果集?

来自分类Dev

如何使用解析窗口SQL函数在同一数据集的行组中查找id值

Related 相关文章

  1. 1

    同一数据集的日期范围

  2. 2

    有效/简单地对同一数据集的不同范围进行计数

  3. 3

    星火:在同一数据集排减值

  4. 4

    Matplotlib同一数据集的多个比例

  5. 5

    匹配同一数据框中的最近日期

  6. 6

    遍历同一数组的多个范围

  7. 7

    如何从不同页面抓取数据并分配给同一数据集?

  8. 8

    根据同一数据集中2个表之间的关系创建表或数据集

  9. 9

    SQL - 将来自同一数据集的数据与特定列中的匹配值分开

  10. 10

    在一个查询中显示来自同一数据集的不同值

  11. 11

    Laravel 数据库返回的日期时间与同一数据库中的记录不同

  12. 12

    饼图布局在Firefox和Chrome上针对同一数据集产生不同的顺序

  13. 13

    R-在同一数据集上使用函数n次

  14. 14

    在同一数据库上使用多个FluentMigrator程序集

  15. 15

    小数精度沿同一数据集的工作方式不同

  16. 16

    如何使用Apache Flink在同一数据集上计算两个和

  17. 17

    保存的随机森林模型在同一数据集上产生不同的结果

  18. 18

    跨同一数据集的行的SSRS操作-子集-查找

  19. 19

    Caffe 如何在原型中为同一数据集缩放和设置均值

  20. 20

    线性回归 - 将预测值附加到同一数据集

  21. 21

    如果值在同一列和同一数据框中的窗口范围内,则创建新列

  22. 22

    为什么我们可以在同一范围内对同一数据有多个可变引用?

  23. 23

    同一数据框中具有相同日期但不同小时的多个文件

  24. 24

    同一数据透视表中的“计数不同”和最小值(日期)?

  25. 25

    统一数据的“日期时间”格式

  26. 26

    如何使用解析窗口SQL函数在同一数据集的行组中查找id值

  27. 27

    MongoDB:如何在同一数据库中搜索多个集合并返回混合结果集?

  28. 28

    MongoDB:如何在同一数据库中搜索多个集合并返回混合结果集?

  29. 29

    如何使用解析窗口SQL函数在同一数据集的行组中查找id值

热门标签

归档