在表中找到值的出现时间

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

+------------+---------+
|   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 |
+------------+---------+

我需要在表中找到版本的发生时间。 例如:假设我需要获取版本1的发生详细信息,该详细信息在2019年1月10日至15/10/2019和从27/10/2019至30/10/2019存在。我如何查询数据库以得到这样的结果? 我已经尝试了很多方法,但无法产生理想的结果。我什至怀疑使用查询是否有可能! 任何输入都将受到高度赞赏。

预期输出:

+---------+-------------+-------------+
| 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  |
+---------+-------------+-------------+
Foxronger 回答:在表中找到值的出现时间

这是差距和离岛的问题。

尝试一下

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

INSERT INTO @SampleData ([Date],[Version])
VALUES
    ('01-10-2019',1),('02-10-2019',('15-10-2019',('16-10-2019',2),('17-10-2019',('26-10-2019',('27-10-2019',('28-10-2019',('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
本文链接:https://www.f2er.com/3145256.html

大家都在问