2009-11-16 5 views
0

J'ai des données de table qui ressemble maintenant ce que je suis après devient comme celui-ciSELECT le nouvel enregistrement avec une valeur non nulle dans une colonne

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 

le compte de la ligne qui a la plus récente date, mais a une compte non nul. Dans ce cas, la ligne 3 avec le nombre 150.)

par exemple

SELECT `keyword`, `count` , max(`date`) 
FROM `keywords` 
WHERE keyword = "ipod" 
AND `count` IS NOT NULL 
GROUP BY keyword 

Ce retour la bonne date, mais pas le nombre droit (retourné 200). J'ai aussi essayé de faire une jointure gauche sur moi-même.

SELECT `t1`.`keyword` , `t2`.`count` , max(`t1`.`id`) 
FROM `keywords` `t1` 
LEFT JOIN `keywords` `t2` ON `t1`.`id` = `t2`.`id` 
WHERE `t1`.`keyword` = 'ipod' 
AND `t1`.`count` IS NOT NULL 
GROUP BY `t1`.`keyword` 

Et cela ne se l'id max mais il n'a pas quitté jointure sur que, comme je l'espérais et est revenu seulement 200.

aide?

Répondre

1
SELECT `keyword`, `count` , `date` 
FROM `keywords` 
WHERE keyword = "ipod" 
AND `count` IS NOT NULL 
order by date desc 
limit 1 
+0

tu me bats sur ce – jitter

+0

Argh, si simple ... essayait juste de se rendre à la fantaisie. Merci! – Wizzard

1

Je suis sûr que il y a une meilleure façon, mais dans le même temps:

SELECT `count` 
FROM `keywords` 
WHERE keyword = "ipod" 
AND `count` IS NOT NULL 
ORDER BY `date` DESC 
LIMIT 1 

Si répondre à vos besoins. Notez que LIMIT n'est pas un SQL portable, donc cela ne fonctionnera que pour MySQL. La clause ORDER BY est nécessaire pour forcer la base de données à trier par, bien, date. Quand j'ai mentionné qu'il devrait y avoir un meilleur moyen, c'est simplement à cause du fonctionnement de la clause LIMIT, qui est la suivante: La base de données doit extraire TOUTES les lignes répondant aux critères de la requête, puis tronque simplement le jeu de résultats au quantité désirée spécifiée par LIMIT.

0

Est-ce que ce travail pour vous:

SELECT `keyword`, `count`, `date` 
FROM `keywords` 
WHERE keyword = "ipod" 
AND `count` IS NOT NULL 
ORDER BY DATE DESC 
LIMIT 1 
Questions connexes