将一天中的特定时间的所有时间戳记更改为上一个日期

时间:2019-07-18 18:43:53

标签: sql presto amazon-athena

我正在尝试将时间戳为05:59:59 AM或以下的所有数据行转换为上一个日期。因此,例如,“ 2018-12-08 05:05:00”将是“ 2018-12-07”,而“ 2018-11-06 03:02:00”将是“ 2018-11-05”。

时间戳的格式为“ YYYY-MM-DD HH:MM:SS”,并存储为varchar

到目前为止,这是我查询时遇到的问题:

SELECT lift.spot_datetime AS broadcastdate,
    CASE when broadcastdate > to_date(>='06:00:00', 'hh:mm:ss') then to_date('MM/DD/YYYY') end as same_date,
    ELSE when broadcastdate > to_date(<='05:59:59', 'hh:mm:ss') then DATE_SUB(to_date('MM/DD/YYYY' - 1) end as subtract_date

我遇到的一个问题是,似乎我通过其运行查询的AWS Athena客户端似乎无法解析“ dateadd”或“ datesub”功能。

“ AWS Athena客户端引发了错误。SYNTAX_ERROR:行1:17:无法解析列'day'”

运行上述查询时遇到的当前错误如下: “ AWS Athena客户端引发了错误。第2:39行:输入'to_date(> ='[执行ID不可用]时没有可行的选择””

1 个答案:

答案 0 :(得分:0)

从您的SQL查询中,并不清楚您想要哪种结果结构,但让我试一下:

SELECT
    spot_datetime AS broadcastdate,
    IF ( TIME(spot_datetime) < '06:00:00',
        DATE(spot_datetime) - INTERVAL 1 DAY,
        DATE(spot_datetime)
    ) AS your_desired_date
FROM lift;
+---------------------+-------------------+
| broadcastdate       | your_desired_date |
+---------------------+-------------------+
| 2018-12-08 05:05:00 | 2018-12-07        |
| 2018-11-06 03:02:00 | 2018-11-05        |
| 2018-11-06 06:00:00 | 2018-11-06        |
+---------------------+-------------------+
3 rows in set (0.00 sec)