我有以下查询,如果我不使用 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 日期,我得到:
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
有没有办法得到这个?正在计算变量,然后对结果进行排序。有没有办法强制先对结果排序,然后再计算变量?
最佳答案
您是否尝试过移动子查询的顺序?
例如
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
关于mysql - 是否可以使用在 ORDER BY 之后更新自身的变量计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11699321/