如何连续提取每一年[重复]
Posted
技术标签:
【中文标题】如何连续提取每一年[重复]【英文标题】:how extracts for every years a row [duplicate] 【发布时间】:2021-10-03 03:55:00 【问题描述】:我的数据库中有一行是我通过查询获得的:
DATE_START DATE_END
31/12/2014 07/07/2018
我需要在date_start
和date_end
之间每年提取一次我的目的是得到这个:
year
2014
2015
2016
2017
2018
我这样做
SELECT LISTAGG(extract(year from TO_DATE(DATE_START,'dd-MM-yyyy')) ) WITHIN GROUP ( order by oo.DATE_START )
from STUDENT oo
WHERE
...
问题是查询只返回一个值而不是我想要的五个值。谁能帮帮我?
【问题讨论】:
LISTAGG
顾名思义是一个聚合函数。聚合函数用于减少数据集。
这能回答你的问题吗? Generating dates between two dates 或 Get list of numbers in between two columns with key
我建议阅读这个:Recursive Common Table Expressions
【参考方案1】:
当子查询需要同时执行多次时,可以使用With
子句
with myTab(myYear) as
(
select case minStart < minEnd then minStart else minEnd as minYear,
case maxStart > maxEnd then maxStart else maxEnd as maxYear,
from
(
select min(extract(year from date_start) as minStart, max(extract(year from date_start)) as maxStart,
min(extract(year from date_end) as minEnd, max(extract(year from date_end)) as maxEnd from table
) t
union all
select minYear + 1, maxYear
from myTab
where minyear < maxYear
)
select minYear
from myTab
order by minYear;
【讨论】:
以上是关于如何连续提取每一年[重复]的主要内容,如果未能解决你的问题,请参考以下文章