次のクエリがあります。ORDER BY 句を使用しない場合、変数 a はうまく機能します。
@a:=0 を設定します。
SELECT doc, @a as before, movement as mov, (@a:=@a+movement) as after, date
FROM movements m
LEFT JOIN (
SELECT doc, 1 as tdoc, date
FROM invoices
UNION ALL
SELECT doc, 2 as tdoc, date
FROM nulled
) sub
ON m.doc=sub.doc and m.doc_type = sub.tdoc
WHERE m.product_id="XXXX"
だから私は次のようなものを得る:
DOC BEFORE MOVEMENT AFTER DATE
006 0 10 10 2012-07-01
008 10 -3 7 2012-07-03
015 7 5 12 2012-06-20
しかし、動きを日付順に並べたいので、クエリの最後に ORDER BY date を含めると、次のようになります。
DOC BEFORE MOVEMENT AFTER DATE
015 7 5 12 2012-06-20
006 0 10 10 2012-07-01
008 10 -3 7 2012-07-03
私が欲しいものの代わりに:
DOC BEFORE MOVEMENT AFTER DATE
015 0 5 5 2012-06-20
006 5 10 15 2012-07-01
008 15 -3 12 2012-07-03
これを取得する方法はありますか?変数が計算され、その後結果が順序付けられます。結果が最初に並べられてから変数が計算されるようにする方法はありますか?