gpt4 book ai didi

sql-server-2008 - 使用 t sql 创建一个具有传染性的时间线集

转载 作者:行者123 更新时间:2023-12-04 07:09:42 24 4
gpt4 key购买 nike

长期读者,第一次海报。希望一些 SQL 大师可以借给我一些处理能力,以优雅地解决 SQL 问题,并且无需游标。

我正在尝试从包含金钱和日期的数据集中创建一个时间线类型的结果集,其中它们出现的顺序很重要。请参阅下面的示例数据和期望值。

DECLARE @OrderData TABLE(
ID INT IDENTITY,
ProductId INT,
WarehouseId INT,
Cost MONEY,
SaleDate DATETIME
)

INSERT INTO @OrderData
VALUES
(1, 1, 2.71, '2012-02-23 10:01')
,(1, 2, 2.71, '2012-02-23 10:02')
,(1, 1, 2.71, '2012-02-23 10:03')
,(1, 1, 2.71, '2012-02-23 10:04')
,(1, 1, 2.71, '2012-02-23 10:05')
,(1, 1, 2.8, '2012-02-23 10:06')
,(1, 1, 2.9, '2012-02-23 10:07')
,(1, 1, 2.71, '2012-02-23 10:08')
,(1, 1, 2.71, '2012-02-23 10:09')

我正在寻找的结果是一个销售时间线,其中包含产品和仓库组合在其自己的一组销售中的起止日期。一旦数据集中的销售价格发生变化,结果集中就会产生一个新行。

示例数据的结果结构。

Product, warehouse, minsale date, Max sale date
1,1,2.71, 2012-02-23 10.01, 2012-02-23 10.05
1,1,2.80, 2012-02-23 10.06, 2012-02-23 10.06
1,1,2.90, 2012-02-23 10.07, 2012-02-23 10.07
1,1,2.71, 2012-02-23 10.08, 2012-02-23 10.09
1,2,2.71, 2012-02-23 10.02, 2012-02-23 10.02

为任何可用的帮助干杯。

最佳答案

这是一个“差距和孤岛”问题。

select ProductID, WarehouseId, cost, MIN(saledate), MAX(saledate) from
(
select *,
ROW_NUMBER() over (order by saledate)-
ROW_NUMBER() over (partition by cost order by saledate) grp
from @OrderData
) v
group by ProductID, WarehouseId, grp, cost
order by WarehouseID, MIN(SaleDate)

有关更多信息,请搜索“itzik ben-gan 的 gaps and islands”

关于sql-server-2008 - 使用 t sql 创建一个具有传染性的时间线集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13119350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com