获取上一季度的最后一天

icnyk63a  于 2021-06-24  发布在  Hive
关注(0)|答案(2)|浏览(611)

当我跑的时候

SELECT
  MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE())-1 QUARTER - INTERVAL 1 DAY

在这里,它按预期工作。然而,在hive中,我得到一个错误,我缺少一个右括号。我的问题是:

SELECT t1.*, t2.programme
    FROM table1 t1
    LEFT JOIN (SELECT programme FROM table2
        WHERE yyyy_mm_dd = MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE())-1 QUARTER - INTERVAL 1 DAY
    ) t2 ON t2.id = t1.id AND t2.yyyy_mm_dd = t1.yyyy_mm_dd

我做错了什么?
编译语句时出错:失败:parseexception(第4:75行缺失)位于'quarter'l附近的'quarter'
我们正在使用hive v1.1.0。

biswetbf

biswetbf1#

hive的语法和函数与mysql不同。
下面是配置单元支持的所有日期函数的列表。
使用这些函数,select查询将转换为:

SELECT
  date_add(add_months(trunc(date()), (extract(quarter from date()) -1 ) * 3)), -1)
r1wp621o

r1wp621o2#

这可以通过多种方式实现。两种方法:

select last_day(printf('%04d-%02d-%02d',year(current_date),(month(current_date)-1) div 3 * 3 ,1));

退货:

2019-03-31

此处测试:http://demo.gethue.com/hue/editor?editor=326549
还有一种方法:

select last_day(concat(year(current_date),'-',lpad((month(current_date)-1) div 3 * 3,2,0) ,'-01'))

测试:http://demo.gethue.com/hue/editor?editor=326554
重要版本注意:在旧版本的hive中 current_date 可能不起作用,使用 unix_timestamp() 取而代之的是:

select last_day(concat(year(current_timestamp()),'-',lpad((month(current_timestamp())-1) div 3 * 3,2,0) ,'-01'))

测试:http://demo.gethue.com/hue/editor?editor=326565
阅读手册,发明自己的方法。

相关问题