我在 SQL Server 中有一个历史表,其中有
startdate
和 enddate
。我必须删除重复的记录并用准确的历史记录填充另一个表(startdate
和enddate
)。
下表 -
ProductType
列与业务无关。我必须使用 Product
、ProductPrice
、StartDate
和 EndDate
列构建表格,其中如果存在任何重复记录,则为特定产品的 startdate= min(startdate)
和连续记录的 productprice
时期。 enddate
是特定产品的 max(enddate)
,productprice
是连续周期。
示例 - 当前表格如下所示:
产品 | 产品类型 | 产品价格 | 开始日期 | 结束日期 |
---|---|---|---|---|
A | B | 100 | 2018-09-18 | 2019-09-09 |
A | C | 100 | 2019-09-09 | 2019-12-09 |
A | B | 100 | 2019-12-08 | 2019-12-22 |
A | C | 150 | 2019-12-23 | 2019-12-24 |
A | B | 100 | 2019-12-25 | 2019-12-28 |
我面临的问题是,通过将第一个记录的
startdate
和产品价格的最后一个记录的结束日期取为100,记录减少到2个。-
即不是准确的历史
产品 | 产品类型 | 产品价格 | 开始日期 | 结束日期 |
---|---|---|---|---|
A | 100 | 2018-09-18 | 2019-12-28 | |
A | 150 | 2019-12-23 | 2019-12-24 |
这是实际预期的历史记录
我想要实现的是:
产品 | 产品类型 | 产品价格 | 开始日期 | 结束日期 |
---|---|---|---|---|
A | 100 | 2018-09-18 | 2019-12-22 | |
A | 150 | 2019-12-23 | 2019-12-24 | |
A | 100 | 2019-12-25 | 2019-12-28 |
如果我理解正确,以下查询将适合您。
select product, product_type, product_price, min(start_date) as start_date, max(end_date) as end_date
from producttype
group by product, product_price;