求效率最高的mysql语句
有一组人:甲乙丙丁...,表中是每小时统计的他们的收入数据,
现在要求统计他们每天的汇总收入的单小时最高值
比如如下数据,统计完应该是
2012-04-10 的汇总收入的小时最高值13(11点时的甲乙丙丁小时收入的和:2+3+3+5=13)
2012-04-11 的汇总收入的小时最高值是22(发生在10点)
求sql语句。。。。
数据如下人 时间 收入
甲 2012-04-1010:10:10 1
乙 2012-04-1010:10:10 2
丙 2012-04-1010:10:10 3
丁 2012-04-1010:10:10 4
甲 2012-04-1011:10:10 2
乙 2012-04-1011:10:10 3
丙 2012-04-1011:10:10 3
丁 2012-04-1011:10:10 5
甲 2012-04-1110:10:10 3
乙 2012-04-1110:10:10 6
丙 2012-04-1110:10:10 5
丁 2012-04-1110:10:10 8
甲 2012-04-1111:10:10 2
乙 2012-04-1111:10:10 3
丙 2012-04-1111:10:10 3
丁 2012-04-1111:10:10 5 写了个示例:
mysql> select * from t;
+------+---------------------+--------+
| u | date | salary |
+------+---------------------+--------+
| a | 2012-04-10 10:10:10 | 1 |
| b | 2012-04-10 10:10:10 | 2 |
| c | 2012-04-10 10:10:10 | 3 |
| d | 2012-04-10 10:10:10 | 4 |
| a | 2012-04-10 11:10:10 | 2 |
| b | 2012-04-10 11:10:10 | 3 |
| c | 2012-04-10 11:10:10 | 3 |
| d | 2012-04-10 11:10:10 | 5 |
| a | 2012-04-11 10:10:10 | 3 |
| b | 2012-04-11 10:10:10 | 6 |
| c | 2012-04-11 10:10:10 | 5 |
| d | 2012-04-11 10:10:10 | 8 |
| a | 2012-04-11 11:10:10 | 2 |
| b | 2012-04-11 11:10:10 | 3 |
| c | 2012-04-11 11:10:10 | 3 |
| d | 2012-04-11 11:10:10 | 5 |
+------+---------------------+--------+
16 rows in set (0.00 sec)
mysql> select date(date),max(ss) from(
-> select date,sum(salary) ss from t group by date) a group by date(date);
+------------+---------+
| date(date) | max(ss) |
+------------+---------+
| 2012-04-10 | 13 |
| 2012-04-11 | 22 |
+------------+---------+
2 rows in set (0.00 sec) 我感觉这个终极优化不在SQL层面啊,如果用SQL层面标准的分组统计,取最大值就是最简化的写法了~~ 回复 3# junsansi
这个好用,可我还想知道是哪个时间点发生最大值,有办法吗 回复 4# yuhuohu
根据三思大哥的Sql, 作一点修改就可以满足你 的要求了,
不过个人优化一下,如果这个只是报表还行,实时查询的话,表设计就有问题了。
还有lz大哥这么多分,才给5分:dizzy:
mysql> select * from t_group;
+------+---------------------+--------+
| user | time | salary |
+------+---------------------+--------+
| a | 2012-04-10 10:10:10 | 1 |
| b | 2012-04-10 10:10:10 | 2 |
| c | 2012-04-10 10:10:10 | 3 |
| d | 2012-04-10 10:10:10 | 4 |
| a | 2012-04-11 22:10:10 | 50 |
| b | 2012-04-11 11:10:10 | 12 |
| b | 2012-04-10 11:10:10 | 12 |
+------+---------------------+--------+
7 rows in set (0.00 sec)
mysql> select time ,max(ss) from (select time,sum(salary) ss from t_group group by date_format(time,'%Y-%m-%d:%k') )a group by date(time);
+---------------------+---------+
| time | max(ss) |
+---------------------+---------+
| 2012-04-10 10:10:10 | 12 |
| 2012-04-11 11:10:10 | 50 |
+---------------------+---------+
2 rows in set (0.00 sec)
子查询的中的分组精确到每天的小时(24小时制), 外层再以日期分组求当天的Max值,也就是子查询中的小时每组中最大值的, RogerZhuo 发表于 2012-04-18 13:11 static/image/common/back.gif
回复 4# yuhuohu
根据三思大哥的Sql, 作一点修改就可以满足你 的要求了,
不过个人优化一下,如果这个只 ...
谢谢哥们,其实我是点错了才点到悬赏的{:2_179:} 回复 7# yuhuohu
:luya: 不客气, 开玩笑的呢
;P 这么快就解决了?、
页:
[1]
2