0
votes

Sélectionnez la valeur max d'une colonne à partir de plusieurs valeurs d'un autre champ

Utilisation de l'architecte Advantage, j'ai une table qui a deux colonnes, dites Ident et date par exemple. Chaque identification distincte peut avoir plusieurs valeurs de date à l'encontre de celle-ci, donc une ligne par identification et par date si Select * est effectuée. Cependant, bien que je puisse utiliser le code ci-dessous pour obtenir la valeur de date maximale pour chaque identification, il y aura des instances dans ce tableau lorsque la valeur de date est NULL, et je ne veux pas de résultats là où il y a une date à une date contre un Identifiant donné qui est null. Donc, en fait, je veux seulement que ma déclaration montrent les résultats où les seules valeurs de date maximum contre l'identité sont des dates contre des identiques où il n'y a pas de dates nuls. Toutes idées?

Exemple de table: P>

IDENT | DATE
0002  | 30/01/2012 


5 commentaires

Quel DBMS Produit utilisez-vous? "SQL" est juste une langue de requête, pas le nom d'un produit de base de données spécifique. Veuillez ajouter un tag pour le produit de base de données que vous utilisez postgreSQL , oracle , sql-serveur , db2 , ...


Les tables ont colonnes , pas des champs.


OK, a apporté quelques modifications à mon post. J'espère mieux maintenant?


Et s'il y avait une ligne avec identifient = 001 et date = 30/01/2012


Ensuite, cela serait introduit dans les résultats car ce n'est pas nul, et c'est aussi la date maximale.


3 Réponses :


0
votes

Je ne sais pas si j'ai bien compris votre question, mais que vous souhaitez exclure les fonctionnalités pour lesquelles au moins 1 rangée avec un null code> date existe.

Essayez ceci: p>

SELECT   a.ident,
         MAX(a.date)
FROM     Table a
WHERE    NOT EXISTS (SELECT *
                     FROM   Table b
                     WHERE  a.ident = b.ident
                       AND  b.date IS NULL)
GROUP BY a.ident;


3 commentaires

Vous avez frappé le clou sur la tête, mais il n'y a pas de table B impliquée dans ce cas. Juste une table


C'est la même table. B est un alias dans ce cas


Ah, désolé, je te comprends maintenant. Il utilise la même table juste un alias différent. Tout bon. Semble travailler, alors merci beaucoup !!



1
votes

faire le groupe par code> comme avant, utilisez avoir code> pour exclure les identiques ayant une date de valeur null.

select ident, max(date)
from Table A
group by ident
having count(date) = count(*)


0 commentaires

0
votes

Je semble avoir négligé un détail supplémentaire ici, dans la mesure où dans la partie de la déclaration de sélection, je souhaite que la valeur associée d'une autre colonne apportée. Donc, ce sera identifier, date, ref, avec réf. associé à l'identifiant et la date maximale qui a été traduite. Je ne semble pas être capable de faire cela cependant, car Ref n'est pas dans le groupe en partie, et quand je l'ajoute dans le cadre du groupe, il déforme mes résultats.


0 commentaires