【问题标题】:MySQL Pivot Table get first and last rows within grouping recordsMySQL Pivot Table 获取分组记录中的第一行和最后一行
【发布时间】:2013-04-15 09:40:20
【问题描述】:

我在 mysql 上编写了银行数据库。我正在使用 MySQL 数据透视表生成组明智的记录/报告。

这是我的帐户维护示例表,

 ----------------------------------------------------------------------------------
account_number   | description   | Transaction Amount | Balance  | transaction_date
----------------------------------------------------------------------------------
1021212              1             0                    0          2013-04-02
1021213              1             100                 100         2013-04-01
1021212              1             1000                1000        2013-04-02
1021213              1             100                 200         2013-04-01
1021214              1             500                 500         2013-04-02
1021212              2             100                 900         2013-04-09

我需要运行显示每日(每月)交易的完整报告。

这是我要求的报告格式,

-----------------------------------------------------------------------------------
account_number   | init_balance   | total_banking | total_withdraw | final_balance
----------------------------------------------------------------------------------
1021212              0               1000            100                900
1021213              100             100             0                  200
1021214              0             500             0                    600

我正在尝试使用数据透视表查询生成此报告,我可以获得除初始和最终余额字段之外的所有信息。

这是我的示例查询,

SELECT account_number,
**xxxxxxxxxx AS init_balance,**
SUM(CASE WHEN m.description = '1' THEN m.amount END) AS total_banking,
SUM(CASE WHEN m.description = '2' THEN m.amount END) AS total_withdraw,
**xxxxxxxxxx AS final_balance**
FROM account
WHERE transaction_date BETWEEN '2013-04-01' AND '2013-04-30'
GROUP BY account_number
ORDER BY account_number

如果有人可以提供帮助,请告诉我编写数据透视表的模式,以获取表格的第一行和最后一行以及分组结果。

【问题讨论】:

  • 我不明白你真正想要什么。你从哪里得到init_balance?你有什么桌子,你需要什么桌子?
  • 试试这个,但两边都不匹配,CASE WHEN MIN(id) THEN m.balance END AS init,
  • 亲爱的 Michael Sivolobov,我需要先将第一行的余额作为初始余额,将同一帐户的最后一行作为最终余额..
  • 我在您的示例表中看不到任何余额字段。我只看到交易金额,我不明白为什么账户 1021212 的 init_balance = 0 但账户 1021213 的 init_balance = 100

标签: php mysql sql mysqli


【解决方案1】:

试试

CASE WHEN MIN(record_id_field) THEN Balance   END AS initial_amount

CASE WHEN MAX(record_id_field) THEN Balance   END AS final_amount

【讨论】:

    【解决方案2】:

    你需要这样的东西:

        SELECT
        m.account_number,
        SUM(IF(id = t.min_id, balance, 0)) AS init_balance,
        SUM(CASE WHEN m.description = '1' THEN m.amount END) AS total_banking,
        SUM(CASE WHEN m.description = '2' THEN m.amount END) AS total_withdraw,
        SUM(IF(id = t.max_id, balance, 0)) AS final_balance
    FROM
        account m
    INNER JOIN
        (
            SELECT
                account_number,
                MIN(id) AS min_id,
                MAX(id) AS max_id
            FROM
                account
            GROUP BY account_number
        ) AS t
    ON
        m.account_number = t.account_number
    WHERE
        transaction_date BETWEEN '2013-04-01' AND '2013-04-30'
    GROUP BY
        account_number
    ORDER BY
        account_number
    

    【讨论】:

    • 谢谢迈克尔。这是我需要的正确答案。我将在我的数据库中应用它。
    猜你喜欢
    • 2019-12-28
    • 2021-01-15
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2014-11-10
    • 2019-05-24
    相关资源
    最近更新 更多