mysql - 是否可以使用在 ORDER BY 之后更新自身的变量计数器

标签 mysql sql

我有以下查询,如果我不使用 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/

相关文章:

mysql - 带where子句的insert怎么写?

sql - 在sqlite3中使用row_number时出现语法错误

php - 从表中排序数据,分配给变量然后从另一个文件调用

php mysql全文搜索通过id连接的多个表

mysql - SQL 查询 : Delete a entry which is not present in a join table?

mysql - SQL中如何正确使用左连接

mysql - 当列应该变得唯一时合并相关数据

php - 在数据库中搜索某些内容 - 选择 - 需要在 2 个表中搜索

Mysql Order by 不适用于 if 子句中的值

php - 精确的 SQL 查询使用 MySQL 命令行和 PHP PDO 返回不同的数据