所以我有一个名为“ reports”的表,其组织方式为:
id | stock_id | type | time_period | report_date
类型可以是“ Cash_Flow”,“ Income_Statement”或“ Balance_Sheet”,time_period可以是“每季度”或“每年”,report_date是日期。实际上,我想要做的是仅获取每个stock_id的最新报告(按report_date排序)。
因此,如果股票具有“现金流量”,“收入声明”和“余额表”的季度报告分别为2019-04-30和2019-01-30以及2019-04-30的年度报告, d只希望获取每只股票的最新季度报告,而不返回任何年度报告或任何较旧的报告。因此,假设表中每种报告类型有100只股票,总共8个季度(季度报告总计2400行),每种类型有2个年度报告(600行年度报告)。
所以我目前正在Ubuntu 18.04上运行postgresql 10.8。我通常不写原始sql(通常使用ORM),因此,如果答案真的很简单,那么抱歉。
因此,我为每个报告尝试了以下操作,但是它返回了所有行(按预期),而我只想要最新的行。我认为该解决方案可能需要一个独特的解决方案,但我似乎无法使用orderby。
SELECT *
FROM public.reports where time_period='quarterly' and type='Cash_Flow' group by id, stock_id order by report_date desc;
我想要一个只返回300行的选择查询,该查询仅包含100种股票中每一种的最新3种(Income_Statement,Balance_Sheet,Cash_Flow)报告,或者如果这三种类型的报告都更容易进行3种查询每个返回100行。
答案 0 :(得分:0)
我想要一个选择查询,该查询只返回300行,每100只股票中仅包含最新的3个报告。
使用窗口功能。假设您有100只股票:
select r.*
from (select r.*,
row_number() over (partition by stock_id, type order by report_date desc) as seqnum
from public.reports r
where time_period = 'quarterly' and
type in ( 'Cash_Flow', 'Income_Statement', 'Balance_Sheet' )
) r
where seqnum = 1;