2011-11-07 3 views
-1

J'ai une question:Sql requête, sélectionnez des lignes distinctes où non null

J'ai donc les données suivantes dans une table »

id  name  city  state  phone   price 

234 Kevin Chicago IL  5555555555 550 

234 Kevin Chicago IL  5555555555 NULL 

234 Kevin Chicago IL  55555 NULL 

234 Kevin Chicago IL  NULL NULL 

Les gens ont des données chargées dans une base de données et il est montrant comme celui-ci en raison des restrictions de caractères pour chaque ligne ...

Alors, comment puis-je dire à ma requête distincte pour obtenir le maximum de chaque one..I veulent juste cette ligne est revenu:

234 Kevin Chicago IL  5555555555 550 

Et je ne peux pas faire "où toutes les lignes ne sont pas nulles etc." parce que la dernière rangée peut toujours être nulle aussi cela dépend.

Merci beaucoup de votre aide!

+2

quel est votre requête en ce moment ? – jle

+0

Rechercher un tutoriel, c'est un moyen de base pour chercher de l'aide. – Shef

+0

Pouvez-vous fournir la disposition de la table? Votre exemple ne fournit pas une clé primaire logique, une clé de substitution ou tout autre élément permettant d'indiquer l'enregistrement le plus récent. (par exemple, Row_Insert_Timestamp) Y a-t-il une autre logique métier qui vous indique que l'enregistrement le plus récent est celui qui a le moins de valeurs NULL? (Par exemple, l'enregistrement le plus complet pour un ID donné.) –

Répondre

1

Selon ce que « les plus » signifie exactement et en fonction des types de données de phone et price, cela pourrait être votre requête:

Edit: généraliser la requête, obtenir phone & price par personne.

SELECT id, name, city, state, max(phone) AS phone, max(price) AS price 
FROM tbl 
GROUP BY id, name, city, state; 

phone et price peuvent provenir de différentes lignes de cette façon.

Le manuel sur aggregate functions:

Sauf indication contraire, les fonctions de groupe ignorent les valeurs NULL.

Donc, IFNULL ou COALESCE ne sont pas requis ici.

+0

Merci, cela a fonctionné! TRÈS APPRÉCIÉE! – JohnnyRocket

0

essayer cette

SELECT 
ID, 
MAX (IFNULL (NAME, ' ')) AS NAME, 
MAX (IFNULL (CITY, ' ')) AS CITY, 
MAX (IFNULL (STATE, ' ')) AS STATE, 
MAX (IFNULL (PHONE, ' ')) AS PHONE, 
MAX (IFNULL (PRICE, ' ')) AS PRICE 
FROM MyTable 
GROUP BY ID 

Le vous donne ci-dessus pour chaque repère « max » de chaque colonne - cela peut conduire à un contenu de différentes lignes étant combinées ...

Questions connexes