postgresql 在每个公司的最后一个条目之后生成附加行

dy1byipe  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(203)

我有一个列为datecompanyvalue的表。
日期总是季度末的那一天,所以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()来创建一个“下一季度”行,但我不能让它工作。

aiazj4mn

aiazj4mn1#

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查询(组合集)。
根据未公开的基数,可能有更快(优化)的查询变体来获取每个公司的最新行,特别是如果有许多公司并且每个公司有许多行。请参阅:

  • 是否选择每个GROUP BY组中的第一行?
  • 优化GROUP BY查询以检索每个用户的最新行

相关问题