La meilleure façon d'expliquer ce que j'ai besoin montre, c'est pourquoi c'est le cas:
actuellement, j'ai cette requête p> qui me renvoie la base de données suivante < / p> Maintenant, je dois obtenir une nouvelle colonne, cela me montre le comptage de tous les 7 jours précédents, en tenant compte de la date de la ligne.
Donc, si la rangée date du jour 29/06, je dois compter toutes les opérations de ce jour (ma requête le fait déjà) et obtenez toutes les opérations du jour 22/06 au 29/06 P> la Résultat devrait être quelque chose comme ceci: p>
4 Réponses :
Vous pouvez essayer quelque chose comme ceci:
select date_, count(*) as count_, (select count(*) from table as b where b.date_ <= a.date_ and b.date_ > a.date - interval '7 days' ) as count7days_ from table as a group by date_
Il a fini par être la meilleure solution
@Miguel. . . Pouvez-vous définir "meilleur"? Je penserais que la première version de ma réponse aurait la meilleure performance.
Votre solution a également travaillé. Mais, à l'avenir, je vais avoir besoin d'obtenir un nombre distinct des 7 derniers jours. Et je suppose que je ne suis pas capable de faire cela en utilisant les deux versions de la tienne
Si vous avez des valeurs pour toutes les dates, sans lacunes, vous pouvez utiliser les fonctions de fenêtre avec un lignes code> image:
Votre réponse fonctionne pour 99% de mes données. Mais parfois, je n'ai aucune donnée le week-end et cette logique ne le considère pas
Si vous avez des lacunes, vous pouvez effectuer une solution plus compliquée dans laquelle vous ajoutez et soustrayez les valeurs suivantes: Vous pouvez également utiliser la méchante approche auto-jointure. . . Ce qui devrait être correct pendant 7 jours: p> Les performances vont pire et pire car "7" devient plus gros. P> P> - somme (compte _) code> est parce que vous Ne semble pas vouloir vouloir la journée actuelle dans la quantité cumulée. P>
Essayez avec sous-requête pour la nouvelle colonne:
select table.date_ as groupdate, count(table.date_) as date_count, (select count(table.date_) from table where table.date_ <= groupdate and table.date_ >= groupdate - interval '7 day' ) as total7 from table group by groupdate order by groupdate
Quelle base de données utilisez-vous: mysql, postgresql, oracle ...?
J'utilise Amazon AgitéyDhift. Je suppose que vous utilise postgre (pas sûr)
@Miguel. . . Pouvez-vous avoir des lacunes dans les dates?