2016-08-28 2 views
1

데이터 테이블이 입니다.입니다. 나는 내가 필요로하는 그래프, 매일매월, 일년 및 주당 최신 항목을 선택하는 방법?

  1. 마지막 항목을 생성 싶어
  2. 각 주에 대한
  3. 마지막 항목 매월
  4. 마지막 항목 매년

에 대한

  • 마지막 항목 선택한 기간 유형을 기반으로 그래프에 값을 표시합니다.

    다음과 같은 SQL 코드를 사용하면 last entry per day을 가져올 수 있습니다.

    다른 세 가지 결과를 얻으려면 어떻게해야합니까?

  • +1

    사용'추출물 (tt.created_on FROM WEEK), EXTRACT (tt.created_on FROM 월), EXTRACT (tt.created_on FROM 년)'쿼리의 결과. – Elad

    답변

    1

    당신은 window function으로 아주 우아하게이 문제를 해결 할 수 있습니다

    주와 월 기간에 대한
    SELECT created_on, earned_value, planned_value, budgeted_cost 
    FROM (
        SELECT created_on, earned_value, planned_value, budgeted_cost, 
         rank() OVER (PARTITION BY extract(year from created_on), 
                extract(doy from created_on) 
             ORDER BY created_on DESC) r 
        FROM history) sub 
    WHERE r = 1 
    ORDER BY created_on; 
    

    은 단순히 (1 월 1 일부터 계산, DOY = 올해 일) extract(week ...extract(doy from created_on) 매개 변수를 변경할 수 있습니다 . 연간 데이터의 경우 첫 번째 extract() 만 필요하므로 두 번째 PARTITION 용어를 삭제해야합니다.

    +0

    나는 이것이 트릭을하지 않을 것이라고 생각한다. 일주일 동안 변경하면 날짜 03.01.16과 03.01.15는 추출에서 동일한 값을 갖습니다 (created_on에서 주). 다른 시간대의 값을 결합합니다 ... 주 파티션은 월과 년을 포함해야합니다 ... 파티션도 월을 포함해야합니다. – Elad

    +0

    좋은 요일을 제외하고는 그 주 데이터는 한 해 동안 주 번호를 제공하기 때문에 월별로 분할하지 않아도됩니다. 그리고 '일'을 'doy'로 변경하여 그 해를 기본으로 삼았습니다. 답변이 업데이트되었습니다. – Patrick

    0

    EXTRACT(WEEK FROM tt.created_on), EXTRACT(month FROM tt.created_on),EXTRACT(year FROM tt.created_on) 트릭을 수행했습니다.

    SO, 매일

    1 마지막 항목을 각 주에 대한

    SELECT t.created_on, 
    t.earned_value, 
    t.planned_value, 
    t.budgeted_cost 
    FROM history t 
    JOIN (SELECT MAX(tt.created_on) 'maxtimestamp' 
    FROM history tt 
    GROUP BY EXTRACT(DAY FROM tt.created_on)) m ON m.maxtimestamp = t.created_on 
    

    2 마지막 항목 매달

    SELECT t.created_on, 
    t.earned_value, 
    t.planned_value, 
    t.budgeted_cost 
    FROM history t 
    JOIN (SELECT MAX(tt.created_on) 'maxtimestamp' 
    FROM history tt 
    GROUP BY EXTRACT(MONTH FROM tt.created_on)) m ON m.maxtimestamp = t.created_on 
    
    에 대한

    SELECT t.created_on, 
    t.earned_value, 
    t.planned_value, 
    t.budgeted_cost 
    FROM history t 
    JOIN (SELECT MAX(tt.created_on) 'maxtimestamp' 
    FROM history tt 
    GROUP BY EXTRACT(WEEK FROM tt.created_on)) m ON m.maxtimestamp = t.created_on 
    

    3 마지막 항목

    4- 전자 마지막 입력 그룹 ACH 년

    SELECT t.created_on, 
    t.earned_value, 
    t.planned_value, 
    t.budgeted_cost 
    FROM history t 
    JOIN (SELECT MAX(tt.created_on) 'maxtimestamp' 
    FROM history tt 
    GROUP BY EXTRACT(YEAR FROM tt.created_on)) m ON m.maxtimestamp = t.created_on 
    
    관련 문제