PostgreSQL SELECT最大值之前的日期(DATE)

时间:2015-01-05 12:33:31

标签: postgresql date max intervals

我需要选择max(日期)和max(date)之前的日期之间的差异小于366天的行。我知道SELECT MAX(date) FROM table从现在开始获取最后一个日期,但我怎么能得到之前的日期呢?

我需要这样的查询:

SELECT code, MAX(date) - before_date FROM troncon WHERE MAX(date) - before_date < 366 ;

注意:before_date没有引用任何内容,而是被功能性内容所取代。

修改:我正在测试表的示例:

CREATE TABLE troncon (code INTEGER, ope_date DATE) ;

INSERT INTO troncon (code, ope_date) VALUES
('C086000-T10001', '2014-11-11'),
('C086000-T10001', '2014-11-11'),
('C086000-T10002', '2014-12-03'),
('C086000-T10002', '2014-01-03'),
('C086000-T10003', '2014-08-11'),
('C086000-T10003', '2014-03-03'),
('C086000-T10003', '2012-02-27'),
('C086000-T10004', '2014-08-11'),
('C086000-T10004', '2013-12-30'),
('C086000-T10004', '2013-06-01'),
('C086000-T10004', '2012-07-31'),
('C086000-T10005', '2013-10-01'),
('C086000-T10005', '2012-11-01'),
('C086000-T10006', '2014-04-01'),
('C086000-T10006', '2014-05-15'),
('C086000-T10001', '2014-07-05'),
('C086000-T10003', '2014-03-03');

非常感谢!

1 个答案:

答案 0 :(得分:0)

子查询包含使用唯一最大日期连接的所有行,并且您只选择那些不同的最大日期小于366天:

select * from
(
SELECT id, date, max(date) over(partition by code) max_date FROM your_table
) A
where max_date - date < interval '366 day' 

PS:正如@a​​_horse_with_no_name所说,您可以按代码进行分区,以获得每个代码的maximum_date。