2009-11-16 1 views
2

Исходя из этого вопроса SELECT the newest record with a non null value in one columnВЫБРАТЬ все новейшие записи отчетливого ключевое слово с не нулевым значением в одном столбце

Я знаю, что есть проблема, где у меня есть этот данные

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 

И нужен запрос который выберет строки 3, 7 и 9 Строка, которая имеет самую новую дату и не имеет значения null.

+0

мы делаем свою домашнюю работу? – lexu

+1

Нет, у меня есть база данных из 13 мил строк (как и выше), и я пытаюсь выделить все хорошие данные «уникального ключевого слова» в другую таблицу, которую мы будем размещать на другом сервере. – Wizzard

ответ

2

Использование:

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

Чтобы прокомментировать, что это делает: внутренний выбор строит таблицу корней (keyword, most_date), не включая даты на кортежах с подсчетом NULL. Затем он использует это (соединение) для соответствия требуемым столбцам. – Thanatos