MySQL rijen in meerdere datumbereiken tellen?

Ik wil de rijen in verschillende datumbereiken (d.w.z., laatste uur, vandaag, deze week, laatste 30 dagen) uit een gegeven tabel tellen.

Ik moet weten hoeveel vermeldingen in deze tijd/datumperioden zitten om te kunnen zien of een bepaalde gebruiker de limiet heeft bereikt voor elk van deze bereiken. Een gebruiker kan bijvoorbeeld max. 300 vermeldingen één maand maar met een (uurlijks/dagelijks/wekelijks/maandelijks) limiet hebben.

So far I'm trying with a subquery approach using a SELECT CASE similar to this one: group by range in mysql

Welke zou de beste manier moeten zijn om dit te doen?

2
Hoe sla je deze informatie momenteel op? Is het in een datetime-veld? U moet in staat zijn om relevante onderdelen te selecteren met behulp van datetime-functies en groepering. Structuur bieden voor wat je hebt en het gewenste resultaat zou enorm helpen.
toegevoegd de auteur Ilion, de bron
ja, wordt opgeslagen met datetime
toegevoegd de auteur Rodolfo Berríos, de bron

1 antwoord

In MySQL zou je een reeks telfuncties met if-statements kunnen gebruiken, zodat alleen de vereiste datums worden geteld, zoals zo.

SELECT COUNT(IF(date >= DATE_SUB(NOW(), INTERVAL 1 HOUR), 1, null)) AS hourHits, 

enzovoorts

Edited as per comments

3
toegevoegd
U wilt NULL gebruiken als de verkeerde voorwaarde, aangezien COUNT() nog steeds 0 telt in de berekening, anders gebruikt u SUM() . Ik geloof ook dat < moet worden omgeschakeld naar > of dat alle treffers die niet zijn, binnen het uur worden geteld.
toegevoegd de auteur Zane Bien, de bron
Daan heeft gelijk, dit is de feitelijke COUNT: COUNT (IF (datum> = DATE_SUB (NU (), INTERVAL 1 UUR), 1, NULL)) AS hourHits,
toegevoegd de auteur Rodolfo Berríos, de bron