过去 7 天 Unix/Redshift 过滤器不工作

Posted

技术标签:

【中文标题】过去 7 天 Unix/Redshift 过滤器不工作【英文标题】:Last 7 days Unix/Redshift filter not working 【发布时间】:2018-10-22 00:33:03 【问题描述】:

这个查询发生在 Redshift 中,它的 SQL 特性让我发疯。

我的表中有一个 UNIX 纪元时间戳,我需要过滤最近 7 天。 Redshift 缺少from_unixtime() 功能,所以我一起破解了这个。 tb_h 是 UNIX 日期列。 604800000 是 7 天期间的毫秒数。

"tb_h" >= DATE_PART(epoch, DATEADD(milliseconds, -604800000, DATEADD(day, -1, trunc(getdate()))))

此解决方法不会过滤最后七个,它允许所有日期通过。我的逻辑错误是什么?

【问题讨论】:

【参考方案1】:

如果你使用更合理的减法类型会发生什么?

"tb_h" >= DATE_PART(epoch, DATEADD(day, -7, DATEADD(day, -1, CURRENT_DATE)))

其次,在 Postgres 中,epoch 返回秒数——我不确定 Redshift 是否相同。如果您的值以毫秒或微秒为单位,则需要相乘:

"tb_h" >= 1000 * DATE_PART(epoch, DATEADD(day, -8, CURRENT_DATE))

【讨论】:

不幸的是,这些解决方案都不起作用,顶部的一个返回所有日期,底部的一个什么也不返回。我将继续测试这些并尝试让它们发挥作用。 我的时间戳是13位,单位是毫秒 问题是时间戳字段实际上不是时间戳数据类型,它被记录为 BIGINT

以上是关于过去 7 天 Unix/Redshift 过滤器不工作的主要内容,如果未能解决你的问题,请参考以下文章

如何将行旋转为列,并按过去 7 天显示 - SQL SERVER

获取过去 7 天以来的行数

使用数据块计算过去 7 天每天的不同用户

MySQL 选择过去 7 天

如何使用窗口函数获取每个日期值的今天、过去 7 天、过去 30 天的指标?

如何从今天开始从 DB2 获取过去 7 天(1 周)的记录