提问人:Oren Pinsky 提问时间:11/9/2023 最后编辑:Erwin BrandstetterOren Pinsky 更新时间:11/9/2023 访问量:45
为每个公司在最后一个条目后生成额外的行
Generate additional row after last entry for each company
问:
我有一个包含列 , , .date
company
value
日期始终是季度末的日期,因此 2020-12-31、2021-03-31 等。
我需要一个查询,在每家公司最新条目之后的下一个季度显示一个名为“write_off”的布尔值。
例如,如果数据为:
2020-12-31 CompanyA 100
2021-03-31 CompanyA 120
2021-06-30 CompanyA 120
然后,查询应显示:
2020-12-31 CompanyA 100 false
2021-03-31 CompanyA 120 false
2021-06-30 CompanyA 120 false
2021-09-30 CompanyA null true
我试图用它来创建一个“下个季度”行,但我无法让它工作。LEAD()
答:
2赞
Erwin Brandstetter
11/9/2023
#1
SELECT date, company, value, false AS write_off FROM tbl
UNION ALL
( -- parentheses required
SELECT DISTINCT ON (company)
(date + interval '3 month')::date, company
, null AS value, true AS write_off
FROM tbl
ORDER BY company, date DESC NULLS LAST
);
我们需要额外的括号,否则将应用于整个查询(组合集)。ORDER BY
UNION ALL
根据未公开的基数,可能会有更快(优化)的查询变体来获取每个公司的最新行,尤其是在公司很多且每个公司有很多行的情况下。看:
评论
CREATE TABLE