【问题标题】:Amazon Redshift : Best way to compare datesAmazon Redshift:比较日期的最佳方式
【发布时间】:2015-03-26 00:33:30
【问题描述】:

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

  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'

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

【问题讨论】:

    标签: sql date amazon-redshift


    【解决方案1】:

    我更喜欢第四种方式:

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

    【讨论】:

      【解决方案2】:

      怎么样

      created_at_date between to_date('20140601','YYYYMMDD') and to_date('20140630','YYYYMMDD') 
      

      【讨论】:

      • 我的问题是比较日期的最佳方法是什么?
      【解决方案3】:

      不是第一个,因为它执行不必要的截断(除非你真的有这样未处理的数据)。

       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'
      

      但是,由于要求生成月度报告,我认为这是一项重复性任务并且涉及多个数据源,因此我建议创建一个一次性日历表。

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

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

      【讨论】:

        【解决方案4】:

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

        选择日期,'2008-01-04', date_cmp(caldate,'2008-01-04') 从日期开始

        【讨论】:

          【解决方案5】:

          我建议至少不要使用第二个(带有like)... 为了可读性,主要是因为它读起来很自然(至少对我来说),我通常使用像

          这样的东西
          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

          【讨论】:

            猜你喜欢
            • 2017-10-30
            • 1970-01-01
            • 1970-01-01
            • 2012-06-02
            • 1970-01-01
            • 1970-01-01
            • 2016-03-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多