limitation des lignes à l'endroit où la somme d'une colonne est égale à une certaine valeur dans MySQL
Je veux écrire une requête qui retourne toutes les lignes jusqu'à ce que la somme de l'une des colonnes de la valeur atteint une certaine valeur.
Par exemple dans le tableau ci-dessous:
DATE ETC Meeting
2013-02-01 00:00:00 85482 1
2013-02-01 00:00:00 47228 2
2013-02-02 00:00:00 12026 4
2013-02-03 00:00:00 78927 6
2013-02-04 00:00:00 85662 2
2013-03-05 00:00:00 47978 1
2013-08-07 00:00:00 8582 1
Si je veux obtenir les lignes jusqu'à ce que la somme de la colonne Meeting
est égal à 7.
DATE ETC Meeting
2013-02-01 00:00:00 85482 1
2013-02-01 00:00:00 47228 2
2013-02-02 00:00:00 12026 4
Si je veux obtenir les lignes jusqu'à ce que la somme de la colonne Meeting
est égale à 13.
DATE ETC Meeting
2013-02-01 00:00:00 85482 1
2013-02-01 00:00:00 47228 2
2013-02-02 00:00:00 12026 4
2013-02-03 00:00:00 78927 6
Qui SGBDR utilisez-vous, MS SQL Server, MySQL, PostgreSQL...? Qu'avez-vous essayé? Poste de travail requêtes, n'a pas d'importance si le résultat est incorrect, est un point de départ et peut-être que vous n'êtes pas loin de la solution.
Vous semblez avoir aucune CLÉ PRIMAIRE/aucun moyen d'établir l'ordre dans lequel les lignes sont à considérer
Vous semblez avoir aucune CLÉ PRIMAIRE/aucun moyen d'établir l'ordre dans lequel les lignes sont à considérer
OriginalL'auteur Hemant | 2013-02-15
Vous devez vous connecter pour publier un commentaire.
Ici un moyen qui devrait fonctionner dans MySQL :
Il consiste à calculer le total et la sélection de documents, tandis que le total cumulé est inférieur ou égal au nombre donné, dans ce cas
7
.SQL Violon
Remarque il est probable O(N^2) la requête sur le serveur de base de données que le sous-sélectionnez pousse vers la fin de la requête, et il n'y a pas de début de l'arrêt, toutes les sommes seront évaluées. Pourvu que l'étendue de la sélectionne est petit, il a l'avantage d'être d'une seule requête (donc pas besoin d'une procédure stockée, etc).
OriginalL'auteur DMK
Voici un moyen de le faire sans une procédure stockée:
Sauf les dates ne sont pas uniques
Si la ligne a plus de réunions que les X, cette requête va retourner la valeur 0 à la ligne.
OriginalL'auteur toomanyredirects
Ce un surpasse toutes.
SQL Violon
Jeter un oeil à des plans d'exécution pour les deux requêtes.
WHERE
requête avec cela, utilisezAND
dansHAVING
au lieuOriginalL'auteur valdas.mistolis
Hemant vous ne précisez pas le SGBDR qui l'utilisent. Voici un script t-sql que vous pouvez utiliser afin de résoudre votre problème.
OriginalL'auteur Manolis
Voici une vilaine façon:
De la commande est basé sur
DATE
d'abord, puisETC
dans l'ordre décroissant, depuis que semble être ce que nous avons à faire. Notez que si ce n'est pas unique, vous obtiendrez le mauvais résultat.OriginalL'auteur lc.
Dans Oracle, je pense que vous pouvez utiliser la SOMME analytique de la fonction. Vous pouvez consulter ici: http://www.adp-gmbh.ch/ora/sql/analytical/sum.html
OriginalL'auteur Lloyd Santos
Comme aucun SGBD est donné, ce qui suit est un ANSI SQL solution qui fonctionne sur une large gamme de SGBD:
(J'ai utilisé le nom de la colonne
date_column
au lieu dedate
parce queDATE
est un mot réservé en SQL et ne doit pas être utilisé comme un nom de colonne pour éviter les problèmes)oui
date
un mot-clé (mais pas réservé). Même MySQL pense: dev.mysql.com/doc/refman/5.5/en/keywords.html et les dates n'ont pas à être unique pour que cela fonctionneOriginalL'auteur a_horse_with_no_name
Si vous utilisez SQL Server, puis utilisez CROIX APPLIQUER.
OriginalL'auteur IamIC