【问题标题】:SQL Error: "-" can not be applied to timestampSQL 错误:“-”不能应用于时间戳
【发布时间】:2020-05-07 00:04:58
【问题描述】:

我正在使用以下 SQL 查询语句来计算以分钟为单位的时差。

query_preadm_uo = """
select distinct oe.icustay_id, 
                date_diff('second', timestamp '1970-01-01 00:00:00', oe.charttime) as charttime, 
                oe.itemid, oe.value ,  
                60*24*date_part('day',ic.intime-oe.charttime)  + 
                60*date_part('hour',ic.intime-oe.charttime) + 
                date_part('min',ic.intime-oe.charttime) as datediff_minutes
from mimiciii.outputevents oe, mimiciii.icustays ic

""" 

我收到以下错误。

SYNTAX_ERROR:第 1:167 行:“-”不能应用于时间戳, 时间戳无法回滚

错误在以下代码部分。

60*24*date_part('day',ic.intime-oe.charttime)  + 60*date_part('hour',ic.intime-oe.charttime) + date_part('min',ic.intime-oe.charttime) as datediff_minutes

无论如何我可以通过更正查询中的上述代码部分并编写其他代码来实现相同的功能来摆脱这个错误。

【问题讨论】:

    标签: python sql presto


    【解决方案1】:

    更新

    更改为 Presto,而不是 PostgreSQL

    你可以简单地使用

    DATE_DIFF('minute', ic.intime, oe.charttime) AS datediff_minutes
    

    PostgreSQL 的原始答案

    您可以使用 EXTRACT(EPOCH FROM ...) 将您的时间戳转换为时间戳和 unix 纪元之间的秒数,然后减去这些值并除以 60 以获得分钟数,即

    SELECT ...
           (EXTRACT(EPOCH FROM ic.intime) - EXTRACT(EPOCH FROM oe.charttime)) / 60 AS datediff_minutes
    ...
    

    注意你也可以替换:

    EXTRACT(EPOCH FROM oe.charttime) AS charttime,
    

    date_diff('second', timestamp '1970-01-01 00:00:00', oe.charttime) as charttime, 
    

    【讨论】:

    • 通过您提到的更改,我得到了以下错误。错误是An error occurred (InvalidRequestException) when calling the StartQueryExecution operation: line 1:137: Invalid EXTRACT field: epoch unable to rollback
    • 你的 SQL 版本是多少?
    • 我正在使用 AWS Athena 查询 S3。 Amazon Athena 使用 Presto 和 ANSI SQL 支持
    • 你可能想使用to_unixtime函数
    • @ebyhr 你是对的;你可以,但给定date_diff 会直接给出所需的结果我看不出有多大意义?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多