【问题标题】:MySQL User Defined Variable for every spesific ID每个特定 ID 的 MySQL 用户定义变量
【发布时间】:2016-02-10 23:14:34
【问题描述】:

我已经创建了一个表并使用这个查询插入了一些虚拟数据:

  CREATE TABLE transaction (
  idtransaction INT NOT NULL AUTO_INCREMENT,
  idproduct INT NOT NULL,
  quantity INT NOT NULL,
  PRIMARY KEY (idtransaction));  

INSERT INTO transaction (idproduct, quantity) VALUES 
(1, 100),
(1, 200),
(2, 120),
(3, 300),
(2, 200),
(2, 200),
(1, 300);

我想得到这样的表格结果:

|idtransaction| idproduct | quantity | saldo
    1               1         100       100  
    2               1         100       200
    3               2         120       120   
    4               3         300       300
    5               2         200       320
    6               2         200       520
    7               1         300       500

我创建了一个这样的查询:

SELECT  idtransaction,
        idproduct, 
        quantity, 
       (@saldo := @saldo + quantity) as saldo 
FROM    transaction
LEFT JOIN
    (select @saldo :=0) as s on 1=1;

但是,saldo 历史的结果是针对所有 idproduct 计算的。

如何获取每个 idproduct 的“saldo”历史记录?

【问题讨论】:

    标签: mysql user-variables


    【解决方案1】:

    您需要按idproduct 对数据进行排序,然后每当idproduct 更改时重置@saldo

    如果您想要按idtransaction 排序的最终结果,请将带有运行总计的查询放在子查询中,然后对其应用新的顺序。

    SELECT *
    FROM (
        SELECT idtransaction, idproduct, quantity,
                @saldo := IF(idproduct = @lastproduct, @saldo + quantity, quantity) AS saldo,
                @lastproduct := idproduct
        FROM (SELECT *
              FROM transaction
              ORDER BY idproduct, idtransaction) AS t
        CROSS JOIN (SELECT @saldo := 0, @lastproduct = NULL) AS vars) AS x
    ORDER BY idtransaction
    

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 2013-04-25
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多