2015-01-05 4 views
0

max (date)와 max (date) 직전 날짜의 차이가 366 일보다 작은 행을 선택해야합니다. 지금부터 마지막 ​​날짜를 얻으려면 SELECT MAX(date) FROM table에 대해 알고 있지만 어떻게 이전에 날짜를 얻을 수 있습니까?PostgreSQL max (DATE) 이전 날짜 선택

나는 이러한 종류의 쿼리를해야합니다 :

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

NB : before_date 아무것도 참조하고 functionnal 물건으로 대체 할 수 없습니다.

편집 :

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'); 

많은 감사 : 나는 그것을 테스트하고있어 테이블의 예!

+0

그래서 지난 1 년 동안 모든 행을 가져와야합니까? – Houari

+0

예 그들을 계산하려면 모든 행이 필요합니다. – wiltomap

답변

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를 얻을 수 있습니다.

+0

감사합니다. Houari! 귀하의 예제에서 문제는 최대 날짜가 각 행에 대해 동일하며 각 코드의 최대 날짜 **와 행의 날짜 사이의 차이를 계산해야한다는 것입니다. 내가 테스트하고있는 테이블의 생성 스크립트를 포함하도록 내 게시물을 편집했습니다. – wiltomap

+2

@wiltomap : 대신 최대 값 (날짜 별)을 (코드 별 파티션) max_date로 사용하십시오 –

+0

그게 전부입니다! 많은 고마워요 ... 나는'OVER()'와 아직 확신하지 못했습니다. – wiltomap