如何解决如何在 LATERAL VIEW EXPLODE 中使数组动态化?
我在表中有一堆学生记录。
school stduent_id start_date end_date
111 123 2010-02-03 2012-02-03
222 345 2013-02-03 2014-02-03
222 567 2015-02-03 2018-02-03
我想计算每所学校每年有多少学生,比如从 2014 年一直到 2021 年。
目前,我使用横向视图,但它是硬编码的:
SELECT school,yrs,COUNT(DISTINCT stduent_id) AS cnt
FROM TABLE
LATERAL VIEW EXPLODE(ARRAY(2014,2015,2016,2017,2018,2019,2020,2021))a AS yrs
WHERE 1=1
AND YEAR(start_date) <= yrs
AND YEAR(end_date) >= yrs
我希望它在年份移动时自动更新,例如,现在应该是 2014-2021,明年应该是 2015-2022。
知道我该怎么做吗?谢谢!
解决方法
您可以使用poseexplode生成年份范围:
with year_range as(--7 years back from current year till current year
select year(current_date)-7+i as yr
from ( select posexplode(split(space(7),' ')) as (i,x)
) s
)
SELECT school,y.yr,COUNT(DISTINCT stduent_id) AS cnt
FROM TABLE
CROSS JOIN year_range y
GROUP BY school,y.yr
WHERE 1=1
AND YEAR(start_date) <= y.yr
AND YEAR(end_date) >= y.yr
,
SELECT school,yrs,COUNT(DISTINCT stduent_id) AS cnt
FROM TABLE
WHERE yrs
Between Year((DATEADD(YEAR,-7,GETDATE())))
and
Year(GETDATE())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。