postgresql - 查询实现一些逻辑的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 语句中完成吗?
解决方案
看来您的会计年度包含 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;
推荐阅读
- python - 未定义名称凯撒密码
- c# - 我想做一个get方法和一个post方法。我希望 get 方法在 Post 方法之后立即发生
- fortran - 使用有限差分计算一阶和二阶导数时边界处的大误差
- java - 为什么变量“bmi”只能得到变量“weight”的值?
- ios - 未调用 XMLParser 委托方法
- javascript - 在 p5.js 中动态加载一个 sketch.js
- laravel - 如何在 laravel 中进行前端用户登录和管理员登录
- java - Java Streams - 嵌套流的映射方法无法按预期工作
- angular - 为什么 Angular 2 中的 ngx-leaflet 在通过 *ngif 更改状态后不渲染地图
- linux - 为什么在 python3 中导入 pyspark 需要我的 linux 机器上的超级用户访问权限?