带有扭曲的 MIN MAX 查询

MIN MAX query with a twist

我需要获取交易量的最小和最大日期,但我需要根据交易量而不是所有相同数量的交易量对其进行分组....

基本上,我有每日交易量和这些每日交易量的日期。我需要能够获取一组卷的最小日期 "to" 和最大日期 "from"。

请注意,卷可以遍历日期,然后中断,然后为同一卷提供一组新的日期。

希望下面的截图比我能更好地解释。我知道如何通过代码来做到这一点……但想知道 SQL 是否也可以做到这一点。

请注意,SQL 将从应用程序内部调用,我无法插入临时 table 以获得最终结果数据集...

这是我使用 select *:

查询的原始数据

这是我最终想要的:

我的查询 运行 为我提供了卷 1100 所有出现的最小值和最大值。我希望它根据日期之间的间隔进行拆分,如最终结果屏幕截图所示... .

这是我的 SQL:

SELECT daily_volume, MIN(volume_date) AS min_date, MAX(volume_date) AS max_date, ins_num 
FROM daily_volume 
WHERE ins_num = 3854439 
GROUP BY daily_volume, ins_num

以下是为 sql 服务器编写的,但它应该适用于其他数据库 (sqlfiddle):

with DatesMinMax as
(
    select 
        volume_date, 
        daily_volume, 
        isnull 
        (
            (
            select top 1 d2.volume_date
            from daily_volume  d2
            where d.volume_date > d2.volume_date and d.daily_volume <> d2.daily_volume
            order by d2.volume_date desc
            )
            , '1753-01-01'
        ) as min_date,
        isnull 
        (
            (
            select top 1 d2.volume_date
            from daily_volume  d2
            where d.volume_date < d2.volume_date and d.daily_volume <> d2.daily_volume
            order by d2.volume_date 
            )
            , '9999-12-31'
        )  as max_date
    from daily_volume  d
),
DatesFromTo as 
(
    select d1.daily_volume as qty, 
        (select min(d2.volume_date) 
         from DatesMinMax d2 
         where d2.volume_date > d1.min_date and d2.volume_date < d1.max_date
        ) as [from],
        (select max(d2.volume_date) 
         from DatesMinMax d2 
         where d2.volume_date > d1.min_date and d2.volume_date < d1.max_date
        ) as [to]
    from DatesMinMax d1
)
select distinct
    qty,
    [from],
    [to]
from DatesFromTo
order by [from]

DatesMinMax 用于获取与当前交易量不同的第一个日期

DatesFromTo用于获取每一行的日期范围