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