如何获取日期集的(周数,周数)

erhoui1w  于 2021-06-26  发布在  Impala
关注(0)|答案(2)|浏览(491)

我想得到一组日期的元组。
在impala sql中,有一个函数 weekofyear 给出了正确的周数:

select year('2018-12-31'), weekofyear('2018-12-31')

year('2018-12-31')|weekofyear('2018-12-31')|
------------------|------------------------|
              2018|                       1|

但是功能 year 如果要以字符串格式“yyywwk”订购(年、周数)元组,则不起作用。
有没有一个简洁的方法来为每个日期获得“yyyywk”?日期 2018-12-31 在上面的例子中给出的结果 2019W01 .
这不起作用:

select concat(cast(year(dt) as STRING),'W',lpad(cast(weekofyear(dt) as string),2,"0")) as wk, dt
  from (
select '2018-11-30' as dt 
union 
select '2018-12-31' as dt
union 
select '2019-01-31' as dt
       ) as t
 order by 1, 2;

因为它没有正确地排列日期:

wk     |dt        |
-------|----------|
2018W01|2018-12-31|
2018W48|2018-11-30|
2019W05|2019-01-31|

如何获得“周年”= 2019 日期 2018-12-31 ?

tsm1rwdh

tsm1rwdh1#

如果这只是一个 order by 问题,那么我推测您有某种聚合查询。如果是,您可以使用:

order by min(datecol)

这将正确排序整个查询。
也就是说,如果你想在一周前获得信息,那么就使用 date_trunc() 而不是提取年份和周:

select date_trunc('week', '2018-12-31')
pod7payv

pod7payv2#

可以在中使用列别名 order by 条款

select year(datecol) as yr, weekofyear(datecol) as wk
  from yourtable
 order by yr, wk

作为两者 year() 以及 weekofyear() 函数返回 integer 价值观。
在group by、having和order by子句的顶层允许使用别名,例如文档中的group by别名

相关问题