首页 > 解决方案 > 查询实现一些逻辑的postgresql数据库记录

问题描述

表中的股息包括公司及其各自财政年度的股息分配。有些公司每年都派息,但有些公司不派息。从投资的角度来看,那些过去至少连续 3 年派发股息的公司被称为“价值股”。请帮我写一个查询来查找“价值股”,即过去至少连续 3 年派发股息的公司。

这就是使用列创建表的方式。

CREATE TABLE dividend
(
    company character varying(12),
    fiscal_year integer
)

如果我的表中插入了以下数据

company,fiscal_year
-------------------
AHPC,20702071
AHPC,20712072
AHPC,20732074
AHPC,20762077
CZBIL,20692070
CZBIL,20702071
CZBIL,20712072
CZBIL,20732074
GBIME,20692070
GBIME,20702071
GBIME,20712072
GBIME,20732074

预期产出

valuestocks
------------
{"CZBIL ",""GBIME "}

我正在寻找针对此问题的 postgres SQL 查询。可以在一行 SQL 语句中完成吗?

标签: postgresql

解决方案


看来您的会计年度包含 2 个日历年。要获得 3 个组成年,您需要将它们拆分,然后只使用 1 个;前 4 位数字或后 4 位数字。无论哪种方式,您都可以使用带有第二个参数的 LEAD(滞后)窗口函数来指定要查看的数量,然后根据需要比较结果 +/- 1 或 2。

select distinct on (company) company
  from ( select company, fiscal_year 
              , lead( fiscal_year,1) over( partition by company order by fiscal_year) fym1
              , lead( fiscal_year,2) over( partition by company order by fiscal_year) fym2               
           from dividend
       ) csq
   where fiscal_year/10000 = fym1/10000 - 1 
     and fiscal_year/10000 = fym2/10000 - 2 
   order by company;    

推荐阅读