日期数学不会在 R 与 Redshift 中产生相同的结果

Dates math does not result in same results in R vs. Redshift

我在使用 RPostgres 包连接 Redshift 时遇到问题。我不确定这是我们数据库设置的问题,还是包的已知问题。

当我在 Redshift 中使用完全相同的查询与在 R 中使用 RPostgres 包时,我得到不同的结果。

它看起来完全是由于日期数学,因为我的总行数匹配,以及其他所有内容,当不使用日期时。

例如,这可能是我在 Redshift(使用元数据库)中 运行 的查询。如果我 运行 在 R 中使用 RPostgres 包进行完全相同的查询,我将得到完全不同的结果。

SELECT
orders.*
FROM
orders
WHERE 
orders.date >= current_date-3
AND 
orders.date < current_date-2

Metabase 中的日期很有意义。它只显示一天,三天前。但是,在 R 中,它显示 2 天。

为了本示例的目的,将日期视为时间戳。

有没有人 运行 参与其中,或者知道现有问题并解决?

通常最好将日期绝对明确,以确保会话设置不会无意中影响查询。试试这个:

SELECT
orders.*
FROM
orders
WHERE 
orders.date >= date_trunc('day', current_timestamp at time zone 'utc') - '3 days'::interval
AND 
orders.date < date_trunc('day', current_timestamp at time zone 'utc') - '2 days'::interval

如果您的日期隐式存储在不同的时区,您可能需要将时区从 utc 更改为其他时区。