0
votes

SQL Obtenez 7 derniers jours à partir de la date de l'événement

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 xxx

qui me renvoie la base de données suivante < / p>

 Résultat de la requête

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

la Résultat devrait être quelque chose comme ceci:

 résultat attendu


3 commentaires

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?


4 Réponses :


1
votes

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_


3 commentaires

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



2
votes

Si vous avez des valeurs pour toutes les dates, sans lacunes, vous pouvez utiliser les fonctions de fenêtre avec un lignes image: xxx


1 commentaires

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



1
votes

Si vous avez des lacunes, vous pouvez effectuer une solution plus compliquée dans laquelle vous ajoutez et soustrayez les valeurs suivantes: xxx

- somme (compte _) est parce que vous Ne semble pas vouloir vouloir la journée actuelle dans la quantité cumulée.

Vous pouvez également utiliser la méchante approche auto-jointure. . . Ce qui devrait être correct pendant 7 jours: xxx

Les performances vont pire et pire car "7" devient plus gros.


0 commentaires

1
votes

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


0 commentaires