【问题标题】:How to use Redshift DATEDIFF?如何使用 Redshift DATEDIFF?
【发布时间】:2019-02-17 08:27:21
【问题描述】:

我正在尝试向 Redshift SQL 查询添加日期差异计算:

SELECT 
   client,
   session,
   person_id,
   min(event_start) as "session_start",
   max(event_finish) as "session_finish",
   sum (case when event_type = 'execute-query-action-1'  then 1 else 0 end) as "Type1 reports run" ,
   sum (case when event_type = 'execute-query-action-2'  then 1 else 0 end) as "Type 2 reports run" ,
   DATEDIFF(MINUTE,session_start,session_finish) as "session_duration_minutes"
FROM usage_log
group by client,person_Id,session

...我收到一个错误:

function pg_catalog.date_diff("unknown", timestamp with time zone, timestamp with time zone) 不存在 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

有什么建议吗?

【问题讨论】:

    标签: amazon-web-services amazon-redshift


    【解决方案1】:

    没有datediff的解决方案:

    select 
        (
            cast(extract(epoch from to_timestamp(min(event_start), 'YYYY-MM-DD HH24:MI:SS')) as integer) -
            cast(extract(epoch from to_timestamp(max(event_finish), 'YYYY-MM-DD HH24:MI:SS') ) as integer)
        ) / 60 as session_duration_minutes
    FROM usage_log
    

    解决方案将时间戳转换为unix epoch,减去并截断为下限(分钟)。

    【讨论】:

      【解决方案2】:

      DATEDIFF Function 记录为:

      DATEDIFF ( datepart, {date|timestamp}, {date|timestamp} )
      

      因此,它可以采用日期时间戳

      您的查询传递了一个带有时区的时间戳,因此出现了错误。

      因此,您可以使用:

      DATEDIFF(MINUTE, session_start::timestamp, session_finish::timestamp)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-03
        • 2010-12-05
        • 2013-08-07
        相关资源
        最近更新 更多