2013-05-15 6 views
1

PostgreSQL에서 두 가지보기가 있습니다. 하나는 각 조직의 가장 최근 총 금액을 가져 오는 것입니다. 다른 견해는 각 조직의 최근 총 총계를 두 번째로 얻는 것입니다. 문제는 다음과 같습니다. PostgreSQL에서 두 번째에서 마지막 MAX (날짜)를 얻는 방법은 무엇입니까? 이것은 ('날짜'가 아니라 기능, 내 열 중 하나입니다 주) 내 코드입니다 : 도움을PostgreSQL : 마지막 두 번째 MAX (날짜) 얻기

CREATE VIEW vw_totaaldossiers AS 
SELECT SUM(aantal) as totaal 
FROM _dossier i1 
WHERE date = (
    SELECT MAX(date) 
    FROM _dossier i2 
    WHERE i2.instantie = i1.instantie 
    GROUP BY i2.instantie 
); 

CREATE VIEW v2_relatiefdossiers AS 
SELECT SUM(aantal) as relatief 
FROM _dossier i3 
WHERE date = (
    SELECT /* Here comes the second to last MAX(date) */ 
    FROM _dossier i4 
    WHERE i4.instantie = i3.instantie 
    GROUP BY i4.instantie 
); 

감사합니다! 이 같은

답변

1

뭔가 :

SELECT SUM(aantal) as relatief 
FROM _dossier i3 
WHERE date = (
    SELECT date 
    from (
     select date, 
       dense_rank() over (partition by i4.instantie order by date desc) as rnk 
     FROM _dossier i4 
     WHERE i4.instantie = i3.instantie 
    ) t 
    where rnk = 2; 
); 

내가 완전히 확실하지 않다가, 그 I3는 중첩 된 파생 테이블 내부에 실제로 볼 수 있습니다!

Wiktor의 LIMI/OFFSET 쿼리가 빠르거나 느린 지 확인하려면 explain을 실행해야합니다.

5
SELECT date 
FROM _dossier i2 
WHERE i2.instantie = i1.instantie 
GROUP BY i2.instantie 
ORDER BY date DESC LIMIT 1 OFFSET 1 
+0

_dossier.date에 색인이 있는지 확인하십시오. –

+0

정말 고마워요. 이 작동합니다. 3 시간 동안 인터넷을 검색했습니다. ;) – user2213250