PostgreSQL提取Year-fromDate变量



我想从日期类型列中提取年份,我使用了提取函数。但它不能接受我的专栏作为来源,在我的查询下方查找

SELECT NO_PTF, (select extract(year from timestamp C.DT_CRS)::int) as NO_AEE, MT_PRF
FROM public.perfcumultb C
INNER JOIN
(SELECT DT_CRS -- Date maxi pour chaque année
FROM ( SELECT (select extract(year from timestamp DT_CRS)::int) as ANNEE, MAX(DT_CRS) AS DT_CRS
FROM public.perfcumultb 
GROUP BY (select extract(year from timestamp DT_CRS)::int)) C
)        Q ON C.DT_CRS = Q.DT_CRS;

我知道当我用"2006-01-05"替换DT_CRS时,它运行时没有错误。但这里我需要保留专栏有人有主意吗?

这:

(select extract(year from timestamp c.dt_crs)::int) as no_aee

最有可能简化为:

extract(year from c.dt_crs) as no_aee

即:

  • 不需要子select

  • CCD_ 2关键字用于声明文字时间戳;如果dt_crs不是时间戳数据类型,则可以使用dt_crs::timestamp进行强制转换,但我认为它已经是正确的数据类型

  • extract()返回一个整数值,无需强制转换为

我还强烈怀疑您的查询可以简化。看起来就像您想要一行包含每年的最新日期。如果是,请使用distinct on:

select distinct on (extract(year from dt_crs)) c.*
from public.perfcumultb c
order by extract(year from dt_crs), dt_crs desc

最新更新