查找X天前创建的记录

时间:2014-03-13 14:34:13

标签: postgresql

我希望获得11天前创建的所有paid_account条记录。这就是我现在所拥有的:

SELECT *
  FROM paid_account
 WHERE date_trunc('day', created_at) = date_trunc('day', date ?)

-- The ? gets replaced with today's date in the user's timezone.

这样可行,但似乎必须有一种更简单的方法。还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以从current_date中减去11,并将其与迄今投放的created_at进行比较:

created_at::date = (current_date - 11)

答案 1 :(得分:1)

在标准SQL中,您可以从date类型的值或timestamp类型的值中减去interval类型的值。在这种情况下,PostgreSQL支持标准SQL。

由于名为" created_at"通常是时间戳,你可以这样做。

select *
from paid_account
where cast(created_at as date) = current_date - interval '11' day;

但是WHERE子句不是sargable。 (PostgreSQL特定的语法,因为created_at::date也不是sargable。)如果你看一下执行计划,你会发现它总是使用顺序扫描。

在" created_at"上创建索引独自一人没有帮助。您需要表达式date(created_at)上的索引才能获得良好的性能。

create index on paid_account (date(created_at));