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

Change all timestamps with certain time of day to previous date

我正在尝试将时间戳的时间为上午 05:59:59 或以下的所有数据行转换为前一个日期。因此,例如“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" 函数。

"An error has been thrown from the AWS Athena client. SYNTAX_ERROR: line 1:17: Column 'day' cannot be resolved"

当我运行上述查询时得到的当前错误如下: "An error has been thrown from the AWS Athena client. line 2:39: no viable alternative at input 'to_date(>=' [Execution ID not available]"

从你的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)