2017-01-19 10 views
0

すでにタイトルに書かれているように、私はまず、昨年のすべての売上を合計今年を入力し、今年の去年を各クライアントの(last year - this year)から引きます。

今年から昨年の売上を差し引いてmysqlを使った各クライアントの売上(より多くのエントリーを1年合計)

編集:

clientid | ....date..... | quant | product. | client | place | price | 
......1... |2016-01-10  | ...1.... | product1 | anna | Italy... | .100. | 
......1... |2016-04-12  | ...2.... | product2 | anna | Italy... | .300. | 
......1... |2017-01-10  | ...1.... | product1 | anna | Italy... | .200. | 
......1... |2017-04-12  | ...2.... | product1 | anna | Italy... | .400. | 



だから、最後の年にアンナの結果は400である必要があり、今年600 diffが、私はすでに試した200

する必要がありますクエリはいくつかありますが、私にとっては複雑すぎます。


SELECT 
    `date`, `quant`, `clientid`, `product`, `client`, `place`, lastyear.price, thisyear.price , (lastyear.price - thisyear.price) AS diff 
FROM 
    (SELECT 
     `date`, `quant`, `product`, `client`, `place`, SUM(price) 
    FROM 
     `verkauf` 
    WHERE 
     `date` BETWEEN DATE_FORMAT(CURDATE() , '%Y-%m-01') - INTERVAL 24 MONTH AND DATE_FORMAT(CURDATE() , '%Y-%m-31') - INTERVAL 12 MONTH) 

     )as lastyear, 

    (SELECT 
     `date`, `quant`, `product`, `client`, `place`, SUM(price) 
    FROM 
     `verkauf` 
    WHERE 
     `date` BETWEEN DATE_FORMAT(CURDATE() , '%Y-%m-01') - INTERVAL 12 MONTH AND DATE_FORMAT(CURDATE() , '%Y-%m-31') 

     )as thisyear 
WHERE 
    `clientid` = :id 
ORDER BY 
    diff ASC 
LIMIT 
    :start, :limit 
+1

共有表 – denny

答えて

0

お試しください。 1つのサブクエリでは、今年の合計と別のサブクエリで前年の合計をとり、その両方を使用して別のサブクエリを取得しています。

Select m1.clientid, m1.cyear, m0.pyear, m1.sum csum, m0.sum psum, ( m1.sum - m0.sum ) diff from ( select clientid, cyear, sum from ( select clientid, year(date) cyear, sum(price) sum from buget group by clientid, cyear ) T where cyear = year(curdate()) ) m1, ( ( select clientid, pyear, sum from ( select clientid, year(date) pyear, sum(price) sum from buget group by clientid, pyear ) T where pyear = ( year(curdate()) ) - 1) m0 ) where m1.clientid = m0.clientid

+0

http://sqlfiddle.com/#!9/8560fa/5私が何か間違ったことをしましたか? @Suhail AKhtar – delato468

+0

あなたのフィドルをありがとうと申し訳ありませんが、私はこれを試してクエリplzを更新しました。 'm1.clientid、m1.cyear、m0.pyear、m1.sum csum、m0.sum psum、(m1.sum-m0.sum)diffから選択します(select clientid、cyear、sum(select clientid、year) (クライアントID、年齢(日)ピアー、年齢、年齢、性別、年齢、性別、年齢、ここで、m1.clientid = m0.clientid' –

+0

フィデルが更新されたhttp://sqlfiddle.com/(1)m0)ここで、pear =(year(curdate())) - 1)m0) #!9/8560fa/35 –

0

更新回答

select ABS(t3.price2 - t2.price1),t1.client from buget t1 inner join (select sum(price) as price1 from buget where year(date) = year(now()) group by client) t2 on year(date) = year(now()) inner join (select sum(price) as price2 from buget where year(date) = year(now()) - 1 group by client) t3 group by client; 
いくつかのデータと
+0

申し訳ありませんが、私は後半ですが、これはクライアントが1人だけの場合にのみ機能しますか? http://sqlfiddle.com/#!9/60dc1e/1 – delato468

+0

@Jasonはクライアントごとにグループを使用します。 – denny

+0

@Jason私の更新された答えを見てください。 – denny

関連する問題