日期范围内每组的最小值

Minimum value per group between a date range

我正在尝试根据列的开始和结束信息之间的每个产品 ID 找到最小值。

这是原来的 table 样子:

Supplier_ID          Date            Min Per Day      Flag
------------------------------------------------------------
863703036147077      2019-06-14      0                0
863703036147077      2019-06-15      0                0
863703036147077      2019-06-16      48               1
863703036147077      2019-06-17      47               1
863703036147077      2019-06-18      0                0
863703036147077      2019-06-19      0                0
863703036147077      2019-06-20      0                0
863703036147077      2019-06-21      0                0
863703036197742      2019-06-14      0                0
863703036197742      2019-06-15      4                1
863703036197742      2019-06-16      4                1
863703036197742      2019-06-17      0                0
863703036197742      2019-06-18      0                0
863703036197742      2019-06-19      1                1
863703036197742      2019-06-20      2                1
863703036197742      2019-06-21      0                0

这就是我想要实现的...将日期分成 2 列,开始和结束,最后一列给出每天的最小值。

Supplier_ID        StartDate     EndDate       Min
---------------------------------------------------
863703036147077    2019-06-16    2019-06-17    47
863703036197742    2019-06-15    2019-06-17    4
863703036197742    2019-06-19    2019-06-21    1

下面是我编写的脚本,但我无法继续获得我想要的结果。

SELECT
    Supplier_Id
    , Date
    , [Min Per Day]
    , CASE WHEN Flag = 1 AND [Min Per Day] > 0 THEN MIN( [Min Per Day] ) OVER ( PARTITION BY [Supplier_Id] ORDER BY [Supplier_Id], Date ASC RANGE UNBOUNDED PRECEDING) ELSE NULL END
FROM [Data]

也许这可以帮到你

Select a.Supplier_ID, a.StartDate, a.EndDate, b.Min_Per_Day 
From (
  Select Supplier_ID, Max(Date) As StartDate, Min(Date) As EndDate
  From MyTable
  Group By Supplier_ID
) a
Left Join (
  Select Supplier_ID, Min(Min_Per_Day) As Min_Per_Day
  From MyTable
  Group By Supplier_ID
) b On a.Supplier_ID = b.Supplier_ID