如何列出最近10天内的记录?


101
SELECT Table.date FROM Table WHERE date > current_date - 10;

这在PostgreSQL上有效吗?

Answers:


190

是的,这在PostgreSQL中确实有效(假设“ date ” 列的数据类型为date),为什么不尝试一下呢?

标准ANSI SQL格式为:

SELECT Table.date 
FROM Table 
WHERE date > current_date - interval '10' day;

我更喜欢这种格式,因为它使内容更易于阅读(但与相同current_date - 10)。


1
查询应该是:SELECT Table.date FROM Table WHERE date> current_date-间隔“ 10天”;
user2694306'6

4
@ user2694306:interval '10 day'是Postgres语法。interval '10' day是基于SQL标准的语法,Postgres也支持该语法
a_horse_with_no_name

1
间隔应为910,其实是给予你从今日上午十一天回。
David He

1
@DavidHe:这与原始答案具有相同的作用。使用哪个10,而不使用9
a_horse_with_no_name

3
请注意:在Redshift上,@ user2694306的公式有效:间隔为“ 10天”。间隔“ 10”天不适用于Redshift。


9

通过测试(和PostgreSQL dox),我的理解是引号需要与其他答案不同,并且还应包括“ day”,如下所示:

SELECT Table.date
  FROM Table 
  WHERE date > current_date - interval '10 day';

这里展示(您应该可以在任何Postgres db上运行它):

SELECT DISTINCT current_date, 
                current_date - interval '10' day, 
                current_date - interval '10 days' 
  FROM pg_language;

结果:

2013-03-01  2013-03-01 00:00:00 2013-02-19 00:00:00

实际上,我没有注意到布拉德利的答案是正确的。无论如何,我将把我留在这里,以证明这是正确的方法。接受的答案是错误的(至少对于我正在运行的Postgre版本而言)
高度不规则的

0

我会检查数据类型。

current_date具有“日期”数据类型,10是数字,而Table.date-您需要查看表。


0

您也可以在之间使用:

SELECT Table.date
  FROM Table 
  WHERE date between current_date and current_date - interval '10 day';

between必须是具有最低值第一,所以这将是正确地做 SELECT Table.date FROM Table WHERE date between current_date - interval '10 day' and current_date;
类型
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.