2009-11-16 1 views
0

У меня есть таблица данные, которая выглядит как этогоВЫБРАТЬ новейшую запись с ненулевым значением нуля в одной колонке

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 

Теперь то, что я после получения счета в строке, которая имеет самую новую дату, но имеет нет null счет. В этом случае строки 3 со счетом 150.)

например

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

Это возвратило правильную дату, но не правильный подсчет (возвращается 200). Я также попытался сделать левое соединение на себе.

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` 

И это действительно получить максимальный идентификатор, но он не оставил присоединиться на что, как я надеялся, и вернулся только 200.

Помощь?

ответ

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

вы бьете меня на этом – jitter

+0

ARGH, так просто ... просто пытался добраться до фантазии. Благодаря! – Wizzard

1

Я уверен есть лучший способ, но в то же время:

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

должны соответствовать вашим требованиям. Обратите внимание: LIMIT не является переносным SQL, поэтому он будет работать только для MySQL. Условие ORDER BY необходимо, чтобы база данных сортировала, ну, дату.

Когда я упомянул, что должен быть лучший способ, это просто из-за того, как работает статья LIMIT, а именно: База данных должна извлекать ВСЕ строки, соответствующие критериям запроса, а затем просто обрезает набор результатов на желаемую сумму, указанную LIMIT.

0

ли эта работа для вас:

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