【问题标题】: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 
                    ...

问题是查询只返回一个值而不是我想要的五个值。谁能帮帮我?

【问题讨论】:

标签: sql oracle aggregate-functions listagg


【解决方案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;

【讨论】:

    猜你喜欢
    • 2021-05-03
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多