2013-07-27 28 views
0

我有如下表:SQL命令按天来概括/月

+----+---------------------+-------------+-----------------+ 
| id | stat_time   |  reads |   writes | 
+----+---------------------+-------------+-----------------+ 
| 1 | 2013-07-18 20:00:00 | 42614543 |   1342129 | 
| 2 | 2013-07-18 21:00:00 | 23085319 |   326139 | 
| 3 | 2013-07-25 12:00:00 |   0 |   39639 | 
| 4 | 2013-07-25 13:00:00 |  754166 |   39639 | 
| 5 | 2013-07-25 14:00:00 |  693382 |   295323 | 
| 6 | 2013-07-25 15:00:00 |  1334462 |    0 | 
| 7 | 2013-07-25 16:00:00 | 10748367 |   261489 | 
| 9 | 2013-07-25 17:00:00 |  4337294 |    0 | 
| 10 | 2013-07-25 18:00:00 |  3002796 |    0 | 
| 11 | 2013-07-25 20:00:00 |  3002832 |    0 | 
| 12 | 2013-07-25 23:00:00 |   0 |   333468 | 
| 13 | 2013-07-26 17:00:00 | 10009585 |    0 | 
| 15 | 2013-07-26 18:00:00 |  6005752 |    0 | 
| 17 | 2013-07-26 21:00:00 |  333663 |    0 | 
+----+---------------------+-------------+-----------------+ 

我想是这样执行的东西:

SELECT stat_time, SUM(reads), SUM(writes) from this_table GROUP BY stat_time HAVING 'the same day'..

所以其输出三行命令(一个用于2013-07-18,第二个用于2013-07-25,第三个用于2013-07-26),并且在列中的每个这样的行中读取/写入在当天存在读取/写入的总和。

谢谢 大卫

回答

9

希望将stat_time转换为一天做到这一点。该方法取决于数据库。这里有一种方法:

SELECT cast(stat_time as date) as stat_day, SUM(reads), SUM(writes) 
from this_table 
GROUP BY cast(stat_time as date) 
order by stat_day; 

这里有一些其他的方法(用于MySQL和Oracle):

SELECT date(stat_time) as stat_day, SUM(reads), SUM(writes) 
from this_table 
GROUP BY date(stat_time) 
order by stat_day; 

SELECT trunc(stat_time) as stat_day, SUM(reads), SUM(writes) 
from this_table 
GROUP BY trunc(stat_time) 
order by stat_day; 
+0

它看起来完美!谢谢。这是对MySQL的查询,那么如果我给它一个参数2013-07-26什么是函数2013-07-26 17:00:00(同一个月的问题,所以返回值等于2013- 07)。再次感谢。 – user2042985

+0

@ user2042985。 。 。中间的查询是MySQL语法。该函数是'date()'。 –

+0

谢谢戈登! – user2042985

0

让我们假设你有一个列名称为d-DATE_START所以

$query = 'SELECT cast(D_DATE_START as date) as stat_day ,' 
     .'sum(I_REV_MODEL) as totalDayRevenu ' 
     .'FROM t_show WHERE FK_MODEL=136 ' 
     ."and t_show.D_DATE_START between '".$after."' and '".$before."'" 
     .' GROUP BY cast(D_DATE_START as date) ' 
     .' ORDER BY stat_day ';