2009-11-16 5 views
2

Faisant suite à cette question SELECT the newest record with a non null value in one columnSélectionner tout le nouvel enregistrement mot-clé distinct avec une valeur non nulle dans une colonne

Je sais un problème où j'ai ces données

id | keyword | count | date 
1 | ipod | 200 | 2009-08-02 
2 | ipod | 250 | 2009-09-01 
3 | ipod | 150 | 2009-09-04 
4 | ipod | NULL | 2009-09-07 
5 | apple | 100 | 2009-07-01 
6 | apple | 98 | 2009-07-05 
7 | apple | 500 | 2009-07-30 
8 | itunes | NULL | 2009-08-30 
9 | itunes | 50 | 2009-09-10 
10 | itunes | NULL | 2009-09-15 

Et besoin d'une requête qui récupérera les lignes 3, 7 et 9 Ligne qui a la date la plus récente et qui est non nulle.

+0

faisons-nous vos devoirs? – lexu

+1

non, j'ai une base de données de 13 mil de lignes (comme ci-dessus), et j'essaie de séparer toutes les bonnes données 'mot-clé unique' à une autre table que nous allons héberger sur un autre serveur. – Wizzard

Répondre

2

Utilisation:

SELECT t.id, 
     t.keyword, 
     t.count, 
     t.date 
    FROM TABLE t 
    JOIN (SELECT t.keyword, 
       MAX(t.date) 'max_date' 
      FROM TABLE t 
     WHERE t.count IS NOT NULL 
     GROUP BY t.keyword) x ON x.keyword = t.keyword 
          AND x.max_date = t.date 
+0

Pour commenter ce que cela fait: La sélection interne construit une table de tuples (keyword, highest_date), n'incluant pas les dates sur les tuples avec des nombres NULL. Il utilise ensuite cela (la jointure) pour faire correspondre les colonnes nécessaires. – Thanatos

Questions connexes