2016-08-15 9 views
0

タイトルが正しいかどうかわかりませんが、注文に問題があると思います。最新のものから先週までのカウント値を比較する

私はweekあたりの比name年代についてtotal値カウント:

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が常に大きいか、それの前任者と同じです。私は現在持っているものだが、それがテーブルから最初に使用可能な週常に

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 
を返し

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

:私はこのような利用できる最後のweekの数を取得したいと思い

また、すべての週の値を持つリストを取得したいと思います。とそのあなたは、私が副選択を使用するすべての週間結果をしたい場合は、週

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もう1週間追加しました。これが役立つのかどうかは分かりませんが、年間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。 2番目のクエリでは、すべての週のすべての値が返されますが、最近の週にどのように減らすことができますか? – Xaver

関連する問題