我有一个table与一个项目,其成本和日期,它是添加。
CREATE TABLE item_prices (
item_id INT,
item_name VARCHAR(30),
item_price DECIMAL(12, 2),
created_dttm DATETIME
);
INSERT INTO item_prices(item_id, item_name, item_price, created_dttm) VALUES
(1, 'spoon', 10.20 , '2023-01-01 01:00:00'),
(1, 'spoon', 10.20 , '2023-01-08 01:35:00'),
(1, 'spoon', 10.35 , '2023-01-14 15:00:00'),
(2, 'table', 40.00 , '2023-01-01 01:00:00'),
(2, 'table', 40.00 , '2023-01-03 11:22:00'),
(2, 'table', 41.00 , '2023-01-10 08:28:22'),
(1, 'spoon', 10.35 , '2023-01-28 21:52:00'),
(1, 'spoon', 11.00 , '2023-02-15 16:36:00'),
(2, 'table', 41.00 , '2023-02-16 21:42:11'),
(2, 'table', 45.20 , '2023-02-19 20:25:25'),
(1, 'spoon', 9.00 , '2023-03-02 14:50:00'),
(1, 'spoon', 9.00 , '2023-03-06 16:36:00'),
(1, 'spoon', 8.50 , '2023-03-15 12:00:00'),
(2, 'table', 30 , '2023-03-05 10:10:10'),
(2, 'table', 30 , '2023-03-10 15:45:00');
我需要创建一个包含以下字段的新表:
- "* 项目标识 *",
- "* 项目名称 *",
- "* 项目_价格 *",
- "* 生效日期 *":价格生效的日期(created_dttm价格记录)
- "* 有效截止日期 *":此价格有效的截止日期(此产品下一条记录的created_dttm减去一天)
我想它可能是可能的,开始选择的日子上,新的条目添加了新的价格与这样的要求:
SELECT item_id, item_name, item_price,
MIN(created_dttm) as dt
FROM table
GROUP BY item_price, item_id, item_name
它提供了这个输出:
预期输出如下:
| 项目标识|项目名称|项目_价格|有效起始日期|有效至日期|
| - ------|- ------|- ------|- ------|- ------|
| 1个|匙|十时二十分|2023年1月1日|2023年1月13日|
| 1个|匙|十点三十五分|2023年1月14日|2023年2月14日|
| 1个|匙|十一点整|二〇二三年二月十五日|二○二三年三月一日|
| 1个|匙|九点整|二○二三年三月二日|二○二三年三月一日|
| 1个|匙|八点五十分|二〇二三年三月十五日|2023年3月14日|
| 第二章|桌|四十分|2023年1月1日|2022年1月9日|
| 第二章|桌|四十一点整|2023年1月10日|2023年2月18日|
| - -|- -|- -|- -|- -|
2条答案
按热度按时间bis0qfac1#
输出:
| 项目标识|项目名称|项目_价格|有效起始日期|有效至日期|
| - ------|- ------|- ------|- ------|- ------|
| 1个|匙|十时二十分|2023年1月1日01时00分|2023年3月15日12时00分|
| 第二章|桌|四十分|2023年1月1日01时00分|2023年3月10日15时45分|
参见:DBFIDDLE
kqqjbcuj2#
您的查询正确。只是缺少下一步:
LEAD
函数检索分区中的下一个“valid_from_dt”检查here演示。