SQL / Impala:动态确定最新的月份间隔

时间:2016-08-14 21:49:04

标签: sql impala

我使用以下代码查找上个月的数据:

select * from table1 where timestamp > "2016-07-14 00:00:00"

" 2016-07-14 00:00:00"被手动挑选为今天前一个月的日期。但是,我不想更改日期" 2016-07-14 00:00:00"每次我跑它,所以我想知道是否有某种日期功能我可以用来实现这个目标?谢谢!

3 个答案:

答案 0 :(得分:2)

您可以使用DATEADD()

SELECT * FROM table1 WHERE timestamp > DATEADD(month, -1, GETDATE())

文档:https://msdn.microsoft.com/en-GB/library/ms186819.aspx

答案 1 :(得分:0)

看起来Impala有自己的内置功能: http://www.cloudera.com/documentation/archive/impala/2-x/2-1-x/topics/impala_datetime_functions.html

我发现下面的查询有效:

select * from table1 where timestamp > add_months(now(), -1)

答案 2 :(得分:0)

表达式now() - interval 1 month为您提供一个月前的时间戳:

[localhost:21000] > select now() - interval 1 month;
+-------------------------------+
| now() - interval 1 month      |
+-------------------------------+
| 2016-07-31 17:14:09.086188000 |
+-------------------------------+

使用trunc(..., 'DD'),您可以在一天开始时将其舍入:

[localhost:21000] > select trunc(now() - interval 1 month, 'DD');
+---------------------------------------+
| trunc(now() - interval 1 month, 'dd') |
+---------------------------------------+
| 2016-07-31 00:00:00                   |
+---------------------------------------+

所以你的查询可能会这样,例如:

select * from table1 where timestamp > trunc(now() - interval 1 month, 'DD');

您可以在http://www.cloudera.com/documentation/archive/impala/2-x/2-1-x/topics/impala_datetime_functions.html

找到有关这些以及其他日期和时间功能的更多详细信息