【问题标题】:Find the period of occurence of a value in table查找表中某个值出现的时间段
【发布时间】:2019-11-07 11:30:05
【问题描述】:

我有一张包含以下数据的表格。

+------------+---------+
|   Date     | Version |
+------------+---------+
| 1/10/2019  |       1 |
| ....       |         |
| 15/10/2019 |       1 |
| 16/10/2019 |       2 |
| ....       |         |
| 26/10/2019 |       2 |
| 27/10/2019 |       1 |
| ....       |         |
| 30/10/2019 |       1 |
+------------+---------+

我需要在表格中找到version的出现周期。 例如:假设我需要获取从 1/10/2019 到 15/10/2019 以及从 27/10/2019 到 30/10/2019 存在的版本 1 发生详细信息。我如何查询数据库以获得这样的结果? 我尝试了很多方法,但无法产生所需的结果。我什至怀疑这是否可以使用查询! 任何意见都非常感谢。

预期输出:

+---------+-------------+-------------+
| Version | Period from |  Period To  |
+---------+-------------+-------------+
|       1 | 1/10/2019   | 15/10/2019  |
|       2 | 16/10/2019  | 26/10/2019  |
|       1 | 27/10/2019  | 30/10/2019  |
+---------+-------------+-------------+

【问题讨论】:

  • 请提供预期输出
  • @Mazhar 添加了预期的输出表
  • version 3 样本数据中不存在?
  • 对不起!这是第 1 版
  • @a_horse_with_no_name Redshift 就是一个!!

标签: sql amazon-redshift gaps-and-islands


【解决方案1】:

这是差距和孤岛问题。

试试这个

DECLARE @SampleData TABLE ( [Date] DATE, [Version] INT)

INSERT INTO @SampleData ([Date], [Version])
VALUES
    ('01-10-2019', 1), ('02-10-2019', 1), ('15-10-2019', 1),
    ('16-10-2019', 2), ('17-10-2019', 2),('26-10-2019', 2),
    ('27-10-2019', 1), ('28-10-2019', 1), ('30-10-2019', 1)


SELECT
    Y.[Version]
    ,PeriodFrom = MIN(Y.[Date])
    ,PeriodTo   = MAX(Y.[Date])
FROM(
    SELECT 
        X.[Version]
        ,X.[Date]
        ,ISLAND = RN-ROW_NUMBER()OVER( PARTITION BY X.[Version] ORDER BY X.[Date])
    FROM(
        SELECT
             RN=ROW_NUMBER()OVER( ORDER BY S.[Date])
            ,S.[Date]
            ,S.[Version]
        FROM
            @SampleData S
    ) X
) Y
GROUP BY
    Y.[Version], Y.ISLAND
ORDER BY
    PeriodFrom

输出

Version PeriodFrom  PeriodTo
1       2019-10-01  2019-10-15
2       2019-10-16  2019-10-26
1       2019-10-27  2019-10-30

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多