3 votes

Commande SQL pour additionner par jour/mois

J'ai le tableau suivant :

+----+---------------------+-------------+-----------------+
| 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 |
+----+---------------------+-------------+-----------------+

Je voudrais faire quelque chose comme ça :

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

Ainsi, une commande qui produit trois lignes (une pour 2013-07-18, une deuxième pour 2013-07-25 et une troisième pour 2013-07-26) et dans chacune de ces lignes, dans la colonne lectures/écritures, il y a une somme de lectures/écritures pour ce jour.

Merci, David

16voto

Gordon Linoff Points 213350

Vous voulez convertir le stat_time à un jour pour le faire. La méthode dépend de la base de données. Voici une méthode :

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;

Voici d'autres approches (pour MySQL et 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;

0voto

Supposons que vous ayez une colonne avec le nom D-DATE_START donc

$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 ';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X