如何连续提取每一年[重复]

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_startdate_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;

【讨论】:

以上是关于如何连续提取每一年[重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 成员资格日期范围

如何使用python获取上个月和上一年[重复]

坚持连续背单词一年是什么体验

sql 怎么查询每一年1到12个月的数据

Hive求每一年最大气温的那一天 + 温度

需要帮助从 R 中的 .nc 数据集中提取仅一年的数据