generate_series() équivalent à MySQL
J'ai besoin de faire une requête et de joindre tous les jours de l'année, mais dans ma db il n'y a pas un calendrier de table.
Après google-ing, j'ai trouvé generate_series()
dans PostgreSQL. N'MySQL ont quelque chose de semblable?
Mon tableau a quelque chose comme:
date qty
1-1-11 3
1-1-11 4
4-1-11 2
6-1-11 5
Mais ma requête est de retour:
1-1-11 7
2-1-11 0
3-1-11 0
4-1-11 2
and so on ..
Pourquoi ne pouvez-vous pas faire cela dans votre application de la couche logique?
Ce n'est pas la "bonne" solution pour le faire dans la logique d'application. C'est mieux, vraiment mieux à faire via sql (si c'est possible). Si il ne sera pas possible.. ok, je vais faire de mon application logique ...
Eh bien, vous pouvez résoudre la moitié du problème sur MySQL. Qui est, vous pouvez
En fait, je suis résoudre la génération d'un ensemble de calendrier de table.. à partir de 1-1-2010 (par exemple) à 31-12-2020. Il fonctionne.. mais ce n'est pas très élégant ...
Ce n'est pas la "bonne" solution pour le faire dans la logique d'application. C'est mieux, vraiment mieux à faire via sql (si c'est possible). Si il ne sera pas possible.. ok, je vais faire de mon application logique ...
Eh bien, vous pouvez résoudre la moitié du problème sur MySQL. Qui est, vous pouvez
GROUP BY date
et SUM(qty) qty
, mais je n'ai pas le souvenir d'une solution de haut de ma tête pour ajouter des lignes pour les séquences manquantes. Il est préférable de le faire dans la logique d'application, si une date a un qté valeur, montrer, sinon 0.En fait, je suis résoudre la génération d'un ensemble de calendrier de table.. à partir de 1-1-2010 (par exemple) à 31-12-2020. Il fonctionne.. mais ce n'est pas très élégant ...
OriginalL'auteur stighy | 2011-07-29
Vous devez vous connecter pour publier un commentaire.
C'est comment je le fais. Il crée une série de dates à partir de 2011-01-01 à 2011-12-31:
La seule exigence est que le nombre de lignes dans any_table doit être supérieure ou égale à la taille de la portée (>= 365 lignes dans cet exemple). Vous aurez très probablement de l'utiliser comme une sous-requête de l'ensemble de votre requête, donc dans votre cas any_table peut être l'une des tables que vous utilisez dans cette requête.
N'est-ce pas de pause pendant les années bissextiles?
Pas de. Il a juste sorties de 365 jours dans une rangée, mais vous pouvez avoir besoin
limit 366
pour les années bissextiles.Montrez à vos observations commentaires au lieu de modifier la réponse.
Avec tout le respect, la réponse est fausse et doit être modifié. C'est un wiki pour les solutions. Quelqu'un de copier et de coller ce code peut ne pas avoir pensé au cas particulier que je mentionne et vous brûler. Par conséquent, la réponse devrait être édité. Je ne veux pas entrer en revenir à la guerre, mais vous devriez probablement ajouter mon commentaire à l'arrière.
OriginalL'auteur Karolis
Version améliorée de la solution de @Karolis qui assure que cela fonctionne pour toute l'année (y compris les années bissextiles):
OriginalL'auteur davpar
J'étais à la recherche de cette solution mais sans le "codé en dur" date", et je suis venu avec ce valable pour l'année en cours(avec l'aide de ce réponses).
Veuillez noter que le
n'est pas nécessaire que l'sélectionnez déjà filtre de la date. Aussi de cette façon, il n'a pas d'importance qui table(au moins comme l'a déclaré devant le tableau a au moins 366 lignes) est utilisé, la date est "calculé" dans l'exécution.
OriginalL'auteur Carmine Tambascia