【发布时间】:2019-04-30 06:40:25
【问题描述】:
我有一张如下表:
date prodname
2018-01-01 Product1
2018-01-05 Product1
2018-01-09 Product1
2018-01-17 Product1
2018-01-24 Product1
2018-01-26 Product1
2018-02-20 Product1
2018-01-02 Product2
2018-01-07 Product2
2018-01-09 Product2
2018-01-17 Product2
2018-01-28 Product2
代码:
CREATE TABLE myTemp(
Date Date,
ProductName varchar(10))
INSERT INTO myTemp values
('2018-01-01', 'Product1')
,('2018-01-05','Product1')
,('2018-01-09','Product1')
,('2018-01-17','Product1')
,('2018-01-24','Product1')
,('2018-01-26','Product1')
,('2018-02-20','Product1')
,('2018-01-02','Product2')
,('2018-01-07','Product2')
,('2018-01-09','Product2')
,('2018-01-17','Product2')
,('2018-01-28','Product2')
该表可以为每个产品包含任意数量的日期条目。 我想显示产品名称、最短日期和最短日期 + 24 天。我想为每 25 天的存储桶执行此操作。
例如, 对于 product1,2018-01-01 是最小日期,2018-01-25 是 PLUS 25 日期。 但是,product1 也有日期大于 2018-01-25 的记录。所以我应该在下面的输出中看到 product1 的另一条记录:
2018-01-26 2018-02-19 product1
2018-01-26 是 2018-01-25 之后的最小日期。 2109-02-19 是 PLUS 25 日期。 product1 是产品名称。
这样,我的最终输出应该是:
2018-01-01 2018-01-25 Product1
2018-01-26 2018-02-19 Product1
2018-01-02 2018-01-26 Product2
2018-01-28 2018-02-21 Product2
我尝试使用 min() 和 DateAdd() 进行操作,但它为每个产品提供了一行。
DROP TABLE IF EXISTS #MyTemp
select MIN(Date) CurrDate, DateAdd(d, 24, MIN(Date)) CurrPlus25Date, ProductName
into #MyTemp
from myTemp
group by ProductName
select * from #MyTemp
感谢任何帮助。
【问题讨论】:
标签: sql sql-server