2016-08-15 1 views
0

내 제목이 맞는지 확실하지 않지만 주문에 문제가 있다고 생각합니다.지난 주에 현재의 카운트 값을 비교하십시오

ID | name | week | total 
======================== 
1 | Foo | 9 | 2 
2 | Bar | 9 | 4 
3 | Lou | 9 | 3 
4 | Zoo | 9 | 5 
... 
21 | Foo | 10 | 10 
22 | Bar | 10 | 12 
23 | Lou | 10 | 14 
24 | Zoo | 10 | 16 
... 
45 | Foo | 11 | 16 
46 | Bar | 11 | 12 
48 | Lou | 11 | 24 
49 | Zoo | 11 | 24 

weektotal은 그것의 전임자 항상 크거나 같은 :

나는 week 당 특정 name 's의 total 값을 계산합니다.

이 같은 가능한 마지막week의 수를 좀하고 싶습니다은 :

name | week | count 
=================== 
Foo | 11 | 6  //= 16-10 
Bar | 11 | 0  //= 12-12 
Lou | 11 | 10 //= 24-14 
Zoo | 11 | 8  //= 24-18 

내가 현재 가지고 있지만 테이블에서 사용 가능한 첫 번째주 항상 반환 무엇을 그

SELECT a.*, 
     a.total - b.total AS count 
FROM table AS a 
     LEFT JOIN table AS b 
       ON a.name = b.name 
       AND a.week = b.week + 1 
GROUP BY b.name 

또한 의 모든 주과 그의 값을 가진 목록을 얻고 싶습니다. 당신은 내가 하위 선택을 사용하는 모든 주에 대한 결과를 원하는 경우에는 주

SELECT current.name, current.week, current.count - last.count 
FROM table as current 
JOIN table as last 
ON current.name = last.name 
AND current.week = last.week - 1 
WHERE current.week = 11 

을 정의 할 수 있도록의

+0

예제에는 매주 2 주 밖에 걸리지 않아 각 이름에 대한 새로운 행이 추가되어 – Xaver

+0

무슨 뜻인지 확실치 않습니다. 기본적으로 매주 판매가 필요합니다. 'total'은'name'의 총 판매 개수입니다. – Xaver

+0

ok 또 한 주가 추가되었습니다. 이것이 도움이되는지 확실하지 않지만 연간 52 주까지있을 수 있으며 항상 최신 (현재) 주 수를 알고 싶습니다. 이 표에는 1 년짜리 열이 포함되어 있지만이 값을 추가하면 더 혼란 스러울 수 있으므로 간단하게 유지하기로 결정했습니다. – Xaver

답변

0

예 :

SELECT x.name 
    , x.week 
    , x.total-MAX(y.total) count 
    FROM my_table x 
    JOIN my_table y 
    ON y.name = x.name 
    AND y.week < x.week 
    JOIN (SELECT MAX(week) week FROM my_table) z 
    ON z.week = x.week 
GROUP 
    BY x.name 
    , x.week 
ORDER 
    BY x.id; 
1

쿼리에 WHERE 절을 추가

SELECT current.name, current.week, current.count, 
    current.count - (SELECT last.count FROM table as last WHERE last.name = current.name AND last.week = current.week-1) as diff 
FROM table as current 
+0

Thx. 두 번째 쿼리는 모든 주가의 모든 값을 반환합니다. 가장 최근 주에이를 어떻게 줄일 수 있습니까? – Xaver

관련 문제