Sis*_*sir 2 mysql sql database
我有一个像这样的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
Run Code Online (Sandbox Code Playgroud)
我可以使用SQL查询获取事务.这对我来说没问题.但我想要的是SQL查询
编辑:添加了否4.忘了以前添加它.我还需要一天的余额.
例如
Dr 105,Cr 0和balance 105 Dr 100,Cr 20和balance 185 仅供参考:日期栏是timestamp.
用途GROUP BY:
SELECT DATE(date), type, SUM(amount)
FROM transaction
GROUP BY DATE(date), type
Run Code Online (Sandbox Code Playgroud)
工作演示
编辑:您在问题中添加了一些要求,以便每天只获得最后一笔余额,因此更新了查询.由于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);
Run Code Online (Sandbox Code Playgroud)
......或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);
Run Code Online (Sandbox Code Playgroud)
哪个更有效率,您必须测试您的数据,但特别是GROUP BY DATE(date)可能会导致一些麻烦,因此您可能希望将实际日期列添加到您可以分组的表中.
如果id您想要将其用作检测当天的最后一个信用卡/借记卡而不是date,那么查询应该非常直接地进行更新.
| 归档时间: |
|
| 查看次数: |
3359 次 |
| 最近记录: |