【发布时间】:2015-10-28 04:03:09
【问题描述】:
我有下表。 “季度”列中的每个值都是日历季度末(例如 3/31、6/30、9/30、12/31),数据可以追溯到 1970 年代:
name | value | quarter
-------|-------|----------
bob | 12 | 2014-3-31
jane | 9 | 2014-6-30
bob | 12 | 2014-9-30
dave | 12 | 2014-12-31
bob | 7 | 2015-3-31
mary | 17 | 2015-6-30
mary | 12 | 2015-9-30
我根据是否早于指定的季度结束日期来选择一些记录:例如“选择 >= 到 2 个季度前的行”或“>= 15 个季度前”等。
从最近一个季度查找 1 年前的记录很容易:
SELECT * FROM mytable WHERE quarter >= (SELECT max(quarter) - interval '12 month' FROM mytable)
name | value | quarter
-------|-------|----------
bob | 12 | 2014-9-30
dave | 12 | 2014-12-31
bob | 7 | 2015-3-31
mary | 17 | 2015-6-30
mary | 12 | 2015-9-30
但是,我不知道如何选择基于季度的记录,比如 2 个季度(请记住,虽然数据可以追溯到 1970 年代,但我并没有每个季度都在里面,所以我是缺少一些季度,例如 1987 年 12 月 31 日、2011 年 9 月 30 日等):
SELECT * FROM mytable WHERE quarter >= (SELECT max(quarter) - interval '2 quarter' FROM mytable)
ERROR: invalid input syntax for type interval: "2 quarter"
编辑: 结束点将始终相对于表中的最大值(四分之一)...
【问题讨论】:
标签: sql postgresql postgresql-9.4