请教mysql中的一个查询语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教mysql中的一个查询语句相关的知识,希望对你有一定的参考价值。

现有下表:
序号 姓名 应缴日期 本月欠费
1 AA 2012-01-01 20.00
2 BB 2012-01-01 13.50
3 CC 2012-01-01 0.00
4 AA 2012-01-01 10.00
5 BB 2012-01-01 0.00
6 CC 2012-01-01 5.00
7 AA 2012-01-01 0.00
8 BB 2012-01-01 7.50
9 CC 2012-01-01 6.00
现在想输入查询语句实现如下结果:
序号 姓名 应缴日期 本月欠费 上月欠费 欠费总计
1 AA 2012-01-01 20.00 10.00 30.00
2 BB 2012-01-01 13.50 0.00 21.00
3 CC 2012-01-01 0.00 5.00 11.00
4 AA 2012-01-01 10.00 0.00 10.00
5 BB 2012-01-01 0.00 7.50 7.50
6 CC 2012-01-01 5.00 6.00 11.00
7 AA 2012-01-01 0.00 0.00 0.00
8 BB 2012-01-01 7.50 0.00 7.50
9 CC 2012-01-01 6.00 0.00 6.00
请问如何实现???
日期打错了,应该递减一个月,序号4-6的应缴日期为2011-12-01,序号7-9的应缴日期为2011-11-01

mysql> select * from testfee
-> ;
+----+------+------------+------+
| id | name | time | fee |
+----+------+------------+------+
| 1 | A | 2012-01-01 | 10 |
| 2 | B | 2012-01-01 | 20 |
| 3 | C | 2012-01-01 | 30 |
| 4 | A | 2011-12-01 | 11 |
| 5 | B | 2011-12-01 | 12 |
| 6 | C | 2011-12-01 | 13 |
| 7 | A | 2011-11-01 | 9 |
| 8 | B | 2011-11-01 | 8 |
| 9 | C | 2011-11-01 | 7 |
+----+------+------------+------+
-------------------------------------------------
sql:
select t1.id,t1.name,t1.time,t1.fee, (case when t2.fee is null then 0 else t2.fee end) as shangyuefee,(case when t2.fee is null then t1.fee else t2.fee+t1.fee end) as allfee from testfee t1 left join testfee t2 on t1.name=t2.name and PERIOD_ADD(date_format(t2.time,'%y%m'),1)=PERIOD_ADD(date_format(t1.time,'%y%m'),0) order by t1.time desc,t1.name;
------------------------------------------------------------------------------
mysql> select t1.id,t1.name,t1.time,t1.fee, (case when t2.fee is null then 0 else t2.fee end) as shangyuefee,(case when t2.fee is null then t1.fee else t2.fee+t1.fee end) as allfee from testfee t1 left join testfee t2 on t1.name=t2.name and PERIOD_ADD(date_format(t2.time,'%y%m'),1)=PERIOD_ADD(date_format(t1.time,'%y%m'),0) order by t1.time desc,t1.name;
+----+------+------------+------+-------------+--------+
| id | name | time | fee | shangyuefee | allfee |
+----+------+------------+------+-------------+--------+
| 1 | A | 2012-01-01 | 10 | 11 | 21 |
| 2 | B | 2012-01-01 | 20 | 12 | 32 |
| 3 | C | 2012-01-01 | 30 | 13 | 43 |
| 4 | A | 2011-12-01 | 11 | 9 | 20 |
| 5 | B | 2011-12-01 | 12 | 8 | 20 |
| 6 | C | 2011-12-01 | 13 | 7 | 20 |
| 7 | A | 2011-11-01 | 9 | 0 | 9 |
| 8 | B | 2011-11-01 | 8 | 0 | 8 |
| 9 | C | 2011-11-01 | 7 | 0 | 7 |
+----+------+------------+------+-------------+--------+追问

您这个t1,t2代表什么?

追答

t1 t2是表的别名,这个由你定义

参考技术A select a.姓名 a.应缴日期 a. 本月欠费 sum(本月欠费 )as 欠费总计
from table
group by 应缴日期追问

明显不可以啊……出来后每个人每个月后面都是一样的值,并且还不是正确的
而且还有个上月欠费字段呢?

以上是关于请教mysql中的一个查询语句的主要内容,如果未能解决你的问题,请参考以下文章

mssql中一个简单的模糊查询语句怎么写请教大侠们

菜鸟请教sql问题

请教怎么写跨库查询的SQL语句

请教mysql一个sql语句,存在则更新,不存在则插入

请教mysql模糊查询两边都用%为啥用不到索引?

请教MYSQL insert语句的长度限制 MYSQL语句最长可以多长