Amazon Redshift:比较日期的最佳方式

时间:2015-01-27 11:45:27

标签: postgresql amazon-web-services amazon-redshift

我有一个redshift示例表。我想生成一份包含月份数据的报告。到目前为止,我发现了以下三种方式。

 1. trunc(created_at_date) between '2014-06-01' and '2014-06-30';
 2. created_at_date like '2014-06%'
 3. created_at_date >= '2014-06-01 00:00:00' and created_at_date <= '2014-06-30 23:59:59'

这样做的最佳和最佳方式是什么?

5 个答案:

答案 0 :(得分:1)

不是第一个,因为它执行不必要的(除非您确实有未处理的数据)截断。

 1. trunc(created_at_date) between '2014-06-01' and '2014-06-30';

绝对不是出于明显的原因(例如)

 2. created_at_date like '2014-06%'

可能是这个:

 3. created_at_date >= '2014-06-01 00:00:00' and created_at_date <= '2014-06-30 23:59:59'

但是,由于要求是生成月度报告(我认为这是一项经常性的任务,并且涉及多个数据源),因此建议创建一个一次性的 calendar 表。

该表将日期映射到月值,然后您可以将源数据与该表连接起来并按“月”列分组。

P.S。刚意识到我回答了一个非常“古老”的问题:p

答案 1 :(得分:0)

怎么样

在to_date('20140601','YYYYMMDD')和to_date('20140630','YYYYMMDD')之间

created_at_date

答案 2 :(得分:0)

我建议至少不要使用第二个(有喜欢的)...... 为了便于阅读,主要是因为它自然地读取(至少对我来说),我通常使用像

这样的东西
select col1, col2 , 
   datepart(d, created_at_date) , datepart(mm, created_at_date) 
 from ... 
   group by datepart(d, created_at_date) , datepart(mm, created_at_date) 

如果您想按特定月份或年份过滤,请在where datepart(mm,created_at_date)= 6

中过滤

查看http://docs.aws.amazon.com/redshift/latest/dg/r_Dateparts_for_datetime_functions.html

答案 3 :(得分:0)

http://docs.aws.amazon.com/redshift/latest/dg/r_DATE_CMP.html

选择caldate,&#39; 2008-01-04&#39;, date_cmp(caldate,&#39; 2008-01-04&#39;) 从日期

答案 4 :(得分:0)

我更喜欢第四种方式:

  1. date_trunc('month', created_at_date) = '2014-06-01'