1

次のクエリがあります。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

これを取得する方法はありますか?変数が計算され、その後結果が順序付けられます。結果が最初に並べられてから変数が計算されるようにする方法はありますか?

4

1 に答える 1

3

サブクエリで順序を移動しようとしましたか?

例えば

set @a:=0;

SELECT doc, @a as before, mov, (@a:=@a+mov) as after, date  
FROM
(
    SELECT doc,  movement as mov, 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"
    order by date
) as x
于 2012-07-28T08:06:15.673 に答える