2010-03-14 7 views
2

J'ai un tableau d'événements appelé event. Pour les besoins de cette question, il n'y a qu'un seul champ appelé date.Comment limiter les résultats par SUM

La requête suivante me renvoie un certain nombre d'événements qui se produisent à chaque date pour les 14 prochains jours:

SELECT 
    DATE_FORMAT(ev.date, '%Y-%m-%d') as short_date, 
    count(*) as date_count 
FROM event ev 
WHERE ev.date >= NOW() 
GROUP BY short_date 
ORDER BY ev.start_date ASC 
LIMIT 14 

Le résultat pourrait être la suivante:

+------------+------------+ 
| short_date | date_count | 
+------------+------------+ 
| 2010-03-14 |   1 | 
| 2010-03-15 |   2 | 
| 2010-03-16 |   9 | 
| 2010-03-17 |   8 | 
| 2010-03-18 |   11 | 
| 2010-03-19 |   14 | 
| 2010-03-20 |   13 | 
| 2010-03-21 |   7 | 
| 2010-03-22 |   2 | 
| 2010-03-23 |   3 | 
| 2010-03-24 |   3 | 
| 2010-03-25 |   6 | 
| 2010-03-26 |   23 | 
| 2010-03-27 |   14 | 
+------------+------------+ 
14 rows in set (0.06 sec) 

Disons que je veux Dislay ces événements par date. En même temps, je veux seulement afficher un maximum de 10 à la fois. Comment ferais-je cela?

D'une manière ou d'une autre, j'ai besoin de limiter ce résultat par le SUM du champ date_count mais je ne sais pas comment.

Quelqu'un at-il déjà rencontré ce problème?

Toute aide serait appréciée. Merci

Édité: L'exigence supplémentaire (cruciale, oops) que j'ai oublié dans mon message original, c'est que je veux seulement des jours entiers. ie. Compte tenu de la limite est de 10, il ne reviendrait les lignes suivantes:

+------------+------------+ 
| short_date | date_count | 
+------------+------------+ 
| 2010-03-14 |   1 | 
| 2010-03-15 |   2 | 
| 2010-03-16 |   9 | 
+------------+------------+ 
+1

Je pense que votre question ne fera pas ce que vous attendez s'il y a un jour sans événements. –

+0

Si aucun événement ne se produit à une date particulière, alors cette ligne de date n'apparaîtra pas, ce qui est OK pour mes objectifs – denormalizer

+0

Voulez-vous dire que lorsque vous commencez à ajouter le date_count le 14, vous vous arrêterez le 16 puisque 1+ 2 + 9> = 10 ?????? – lexu

Répondre

1

Je pense que l'utilisation LIMIT 0, 10 fonctionnera pour vous.

+0

C'est trop facile! :) qui m'a fait relire ma question et réalisé que j'ai omis un aspect crucial. Désolé pour vous Jacob et lexu permettez-moi de modifier la question. – denormalizer

3
  1. utiliser une fonction de date limite la gamme de 14 jours de la date
  2. limite d'utilisation pour afficher la première 10

SELECT 
    DATE_FORMAT(ev.date, '%Y-%m-%d') as short_date, 
    count(*) as date_count 
FROM event ev 
WHERE ev.date between NOW() and date_add(now(), interval 14 day) 
GROUP BY date(short_date) 
ORDER BY ev.start_date ASC 
LIMIT 0,10 
+0

C'est trop facile! :) qui m'a fait relire ma question et réalisé que j'ai omis un aspect crucial. Désolé de vous Jacob et lexu laissez-moi ammend la question. – denormalizer

Questions connexes