【发布时间】:2019-12-24 23:39:37
【问题描述】:
我有一张名为 prices 的表格,它通过 product_id 列从表格产品中引用。我想要一个查询,选择按 product_id 分组的价格和最大最终日期,并通过一个带有价格分组 ID 的选择来获取 start_date 的值。
我尝试使用以下查询,但我得到了错误的开始日期值。很奇怪,因为结果子查询返回不止一行,即使我在 where 子句中使用价格 id。因为我对查询设置了限制但它是错误的。
select prices.produto_id, prices.id,
MAX(CASE WHEN prices.finish_date IS NULL THEN COALESCE(prices.finish_date,'9999-12-31') ELSE prices.finish_date END) as finish_date,
(select start_date from prices where prices.id = prices.id limit 1)
as start_date from prices group by prices.product_id, prices.id
如何在我的分组行中获取价格 ID 的相对开始日期?我正在使用 postgresql。
通过查询查看我想要的内容的示例:
数据集:
ID | PRODUCT_ID | START_DATE | FINISH_DATE
1 1689 2018-01-19 02:00:00 2019-11-19 23:59:59
2 1689 2019-10-11 03:00:00 2019-10-15 23:59:59
3 1689 2019-01-11 03:00:00 2019-05-15 23:59:59
4 1690 2019-11-11 03:00:00 2019-12-15 23:59:59
5 1690 2019-05-11 03:00:00 2025-12-15 23:59:59
6 1691 2019-05-11 03:00:00 null
我想要这个结果:
ID | PRODUCT_ID | START_DATE | FINISH_DATE
1 1689 2018-01-19 02:00:00 2019-11-19 23:59:59
5 1690 2019-05-11 03:00:00 2025-12-15 23:59:59
6 1691 2019-05-11 03:00:00 9999-12-31 23:59:59
开始日期应该与分组依据之前的行的值相同。
【问题讨论】:
-
样本数据和期望的结果会真正澄清你的问题。
-
好的。我添加了这些信息。
标签: sql postgresql