2017-01-18 5 views
3

を含めて、私は次のことを達成しようとしています:MySQLのグループ第二週値

私はこのようなデータを持つテーブルがある:ここでは

INSERT INTO `control_leads` (`LeadID`, `Type`, `Business`, `Date`, `Multiplier`, `UserID`) 
VALUES 
    (1026, 'Bags', 'AB', '2017-01-18', 1, 11), 
    (1030, 'Ice Scraper', 'AB', '2017-01-18', 1, 8), 
    (1029, 'Drawstring ', 'AB', '2017-01-18', 1, 8), 
    (1028, 'Umbrellas', 'AB', '2017-01-18', 1, 11), 
    (1027, 'Lanyards', 'LP', '2017-01-18', 2, 11), 
    (1025, 'Bags', 'AB', '2017-01-18', 2, 8), 
    (1031, 'Lanyards', 'LP', '2017-01-18', 2, 8), 
    (1018, 'Lanyards', 'LP', '2017-01-17', 1, 8), 
    (1017, 'Bags', 'AB', '2017-01-17', 1, 8), 
    (1023, 'Hand Warmer', 'AB', '2017-01-17', 1, 8), 
    (1020, 'Lanyards', 'LP', '2017-01-17', 2, 11), 
    (1021, 'Pens', 'AB', '2017-01-17', 1, 11), 
    (1022, 'Bags', 'AB', '2017-01-17', 1, 8), 
    (1024, 'Headphones', 'AB', '2017-01-17', 1, 11), 
    (1007, 'Balls', 'AB', '2017-01-16', 1, 8), 
    (1008, 'Lanyards', 'LP', '2017-01-16', 2, 8), 
    (1009, 'Mugs', 'AB', '2017-01-16', 1, 11), 
    (1010, 'Bags', 'AB', '2017-01-16', 1, 8), 
    (1011, 'Bags', 'AB', '2017-01-16', 1, 11), 
    (1013, 'Phone/Table', 'AB', '2017-01-16', 1, 8), 
    (1015, 'Pens', 'AB', '2017-01-16', 1, 11), 
    (1016, 'Selfie Stic', 'AB', '2017-01-16', 1, 8); 

は私のSQLクエリです:

SELECT IFNULL(SUM(Multiplier), 0) AS val, control_leads.Date AS date 
FROM control_leads 
WHERE Date > '2017-01-04' 
GROUP BY control_leads.Date 
ORDER BY date ASC 

結果で:

10 2017-01-05 
6 2017-01-06 
8 2017-01-09 
14 2017-01-10 
9 2017-01-11 
14 2017-01-12 
10 2017-01-13 
10 2017-01-16 
8 2017-01-17 
10 2017-01-18 

しかし、私はこの数週間の値を取得しようとしているだけでなく、このように、先週の比較

含まれています:私は、グループに私がしたい、非常によく説明していませんでした

val1 week1  val2 week2 
10 2017-01-05 14 2017-01-12 
6  2017-01-06 10 2017-01-1 
8  2017-01-09 10 2017-01-16 
14 2017-01-10 8  2017-01-17 
9  2017-01-11 10 2017-01-18 

はEDITをその日のlastweekの値と比較してください。

 val1 week1  val2 week2 
    day1 10 2017-01-05 14 2017-01-12 
    day2 6  2017-01-06 10 2017-01-1 
    day3 8  2017-01-09 10 2017-01-16 
    day4 14 2017-01-10 8  2017-01-17 
    day5 9  2017-01-11 10 2017-01-18 
+0

で、先週と比較のために働く必要があります。 http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-queryを参照してください。 – Strawberry

+0

あなたが挿入したデータ行は2017年に1つしかありませんが、 'WHERE Date> '2017-01-04''で説明した結果はどうやって得られますか? –

+0

@CharlesBretana例として使用しました。実際のテーブルは大規模です。 – jrobilliard

答えて

1

これは、一日のほとんど

SELECT 
cl.date 
, sum(cl.multiplier) val 
, cl2.date last_week 
, ifnull(cl2.last_week_val,0) last_week_val 
, sum(cl.multiplier) - ifnull(cl2.last_week_val,0) diff 
FROM control_leads cl 
    LEFT JOIN (select t.date, sum(t.multiplier) last_week_val from control_leads t group by t.date) cl2 
    ON (cl2.date = cl.date-7) 
GROUP BY date 
ORDER BY date; 

Here is a functional example

+0

申し訳ありませんが、私はそれをとてもうまく説明していないと思います。 – jrobilliard

+0

@jrobilliardははるかに簡単でクリーナーです! – EoinS

+0

@jrobilliard私は自分の答えを更新しました。このリンクをクリックして、データセットでどのように動作するかを確認することもできます – EoinS