如何在同一天mySQL中获得唯一的值总和

 武艺最新单曲问月09 发布于 2023-02-08 10:09

我有一个像这样的mySQL表,表名是transaction:

ID  |   date    |   amount  |   type    |   balance
----------------------------------------------------
1   |   day1    |   100     |   dr      |   100
2   |   day1    |   5       |   dr      |   105
3   |   day2    |   100     |   dr      |   205
4   |   day2    |   20      |   cr      |   185
5   |   day3    |   5       |   cr      |   180

.. and so on

我可以使用SQL查询获取事务.这对我来说没问题.但我想要的是SQL查询

    按天获取数据(过去30天)

    如果在同一天有多个借方(dr)条目.总结一下.

    如果在同一天有多个信用条目(cr).总结一下.

    日结余额(所有余额均在每次借记或贷记完成时计算).因此,当天的最后一次进入是当天的最终平衡.

编辑:添加了否4.忘了以前添加它.我还需要一天的余额.

例如

    对于第一天:Dr 105,Cr 0balance 105

    对于第二天:Dr 100,Cr 20balance 185

仅供参考:日期栏是timestamp.

2 个回答
  • 用途GROUP BY:

    SELECT DATE(date), type, SUM(amount)
    FROM transaction
    GROUP BY DATE(date), type
    

    工作演示

    2023-02-08 10:12 回答
  • 编辑:您在问题中添加了一些要求,以便每天只获得最后一笔余额,因此更新了查询.由于MySQL缺少排名函数,因此我知道需要使用依赖子查询来完成它.

    SELECT 
      DATE(date) date, 
      SUM(IF(type='dr',amount,0)) dr, 
      SUM(IF(type='cr',amount,0)) cr,
      (SELECT balance FROM transaction t2 WHERE t2.date=MAX(t.date)) balance
    FROM transaction t
    GROUP BY DATE(date);
    

    ......或JOIN......

    SELECT 
      DATE(t.date) date, 
      SUM(IF(t.type='dr',t.amount,0)) dr, 
      SUM(IF(t.type='cr',t.amount,0)) cr, 
      t2.balance
    FROM transaction t
    JOIN transaction t2
      ON DATE(t.date)=DATE(t2.date)
     AND t2.date IN (SELECT MAX(date) FROM transaction GROUP BY DATE(date))
    GROUP BY DATE(t.date);
    

    哪个更有效率,您必须测试您的数据,但特别是GROUP BY DATE(date)可能会导致一些麻烦,因此您可能希望将实际日期列添加到您可以分组的表中.

    如果id您想要将其用作检测当天的最后一个信用卡/借记卡而不是date,那么查询应该非常直接地进行更新.

    一个SQLfiddle来测试它们.

    2023-02-08 10:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有