Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 是否可以使用一个变量计数器,该计数器在订单发出后自动更新_Mysql_Sql - Fatal编程技术网

Mysql 是否可以使用一个变量计数器,该计数器在订单发出后自动更新

Mysql 是否可以使用一个变量计数器,该计数器在订单发出后自动更新,mysql,sql,Mysql,Sql,我有以下查询,如果我不使用ORDERBY子句,变量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

我有以下查询,如果我不使用ORDERBY子句,变量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
但我希望移动按日期排序,因此我在查询结束时包括了按日期排序,我得到:

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

有办法得到这个吗?正在计算变量,然后对结果进行排序。有没有办法强制先对结果排序,然后再计算变量?

您是否尝试过在子查询上移动排序

e、 g


如果MySQL最终进入21世纪并支持窗口功能,那么这将变得容易得多。
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