Presto TIMESTAMP 从 2 天前获取数据而不输入年月日期?

Posted

技术标签:

【中文标题】Presto TIMESTAMP 从 2 天前获取数据而不输入年月日期?【英文标题】:Presto TIMESTAMP get data from 2 days ago without inputting year month date? 【发布时间】:2020-12-29 14:25:32 【问题描述】:

我的目标是让查询获取 2 天前的数据。我不想一直这样输入日期:

WHERE usage_start_date
BETWEEN TIMESTAMP '2020-09-09 00:00:00.000' and TIMESTAMP '2020-09-09 
23:59:59.999'

而是类似:

 usage_start_date = current_date - interval '2' day

以上内容适用于我的 Athena Presto SQL 查询,但由于某种原因,不会提供这 24 小时内运行的所有数据,而是提供大约半天的时间。有没有办法做这样的声明,以确保它提供当天的所有数据?

 WHERE current_date - interval '2' day AND
BETWEEN TIMESTAMP '00:00:00.000' and TIMESTAMP '23:59:59.999'

不输入年、月、日?似乎 TIMESTAMP 需要 y/m/d,但是如果做一个 LIKE 来获取小时、分钟、秒但不需要输入 y/m/d 呢?

【问题讨论】:

您可以尝试 select * from table where hour(usage_start_date) 在 0 到 23 和 current_date - interval '2' day = date(usage_start_date) 并告诉我这是否适用于您的用例? usage_start_date的数据类型是什么? @PrabhakarReddy 这行得通!谢谢...请作为答案提交,以便我选择最佳答案 @MartinTraverso 字符串 【参考方案1】:

要获得两天前一天开始的时间戳,您可以这样做

DATE_TRUNC('day', NOW() - INTERVAL '2' DAY)

例如

WHERE usage_start_date >= DATE_TRUNC('day', NOW() - INTERVAL '2' DAY)
  AND usage_start_date <  DATE_TRUNC('day', NOW() - INTERVAL '1' DAY)

【讨论】:

【参考方案2】:

您可以使用以下查询通过从 usage_start_date 获取小时和日期来完成任务

select * from table where hour(usage_start_date) between 0 and 23 and current_date - interval '2' day = date(usage_start_date)

【讨论】:

【参考方案3】:

我建议:

WHERE usage_start_date >= CURRENT_DATE - INTERVAL '2' DAY AND
      usage_start_date < CURRENT_DATE - INTERVAL '1' DAY

【讨论】:

以上是关于Presto TIMESTAMP 从 2 天前获取数据而不输入年月日期?的主要内容,如果未能解决你的问题,请参考以下文章

Python-日志删除

python删除日志

presto时间相关的函数

从 Presto SQL 中的字符串获取日期

Presto个人常用操作

在 Athena/Presto 中将数组拆分为列