PostgreSQL 从日期变量中提取年份
PostgreSQL extract Year fromDate variable
我想从我的日期类型列中提取年份,
我使用了提取功能。但它不能接受我的专栏作为来源,
在我的查询下面找到
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;
我知道当我将 DT_CRS 替换为“2006-01-05”时,它是 运行 而没有错误。但在这里我需要保留专栏
有人有想法吗?
这个:
(select extract(year from timestamp c.dt_crs)::int) as no_aee
最有可能简化为:
extract(year from c.dt_crs) as no_aee
即:
不需要分select
timestamp
关键字用于声明文字时间戳;如果 dt_crs
不是时间戳数据类型,你可以用 dt_crs::timestamp
转换它,但我假设它已经是正确的数据类型
extract()
returns 整数值,不用强制转换
我也强烈怀疑您的查询可以简化。它看起来 就像您想要包含每年最新日期的行一样。如果是这样,请使用 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
我想从我的日期类型列中提取年份, 我使用了提取功能。但它不能接受我的专栏作为来源, 在我的查询下面找到
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;
我知道当我将 DT_CRS 替换为“2006-01-05”时,它是 运行 而没有错误。但在这里我需要保留专栏 有人有想法吗?
这个:
(select extract(year from timestamp c.dt_crs)::int) as no_aee
最有可能简化为:
extract(year from c.dt_crs) as no_aee
即:
不需要分
select
timestamp
关键字用于声明文字时间戳;如果dt_crs
不是时间戳数据类型,你可以用dt_crs::timestamp
转换它,但我假设它已经是正确的数据类型extract()
returns 整数值,不用强制转换
我也强烈怀疑您的查询可以简化。它看起来 就像您想要包含每年最新日期的行一样。如果是这样,请使用 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