日期范围内每组的最小值
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
我正在尝试根据列的开始和结束信息之间的每个产品 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