MySql Выбрать оператор, отличающийся значением последней даты на основе первичного идентификатора ключевого слова - PullRequest
1 голос
/ 30 сентября 2010

В основном у меня есть список ключевых слов SEO в одной таблице и их рейтинг, включая дату, введенную в другой таблице.

ключевые слова

[keywordID(PKID)] [keyword]
----------------------------
1                 SEO
2                 Vancouver Homes

keywordRanking

[rankingID(PKID)] [keywordID(FKID)] [ranking] [rankingDate(timestamp)]
----------------------------------------------------------------------
1                 1                 3         Jan 01, 2010
2                 1                 5         Jan 02, 2010
3                 1                 8         Jan 03,2010
4                 2                 4         Jan 01, 2010

Вот результаты, которые я хочу. Я хочу получить последний рейтинг ключевого слова на основе его последнего рейтинга Дата без дубликатов.

Для приведенных выше данных он должен вернуть:

                  [keywordID] [rankingID] [ranking] [rankingDate] 
                  -----------------------------------------------
 SEO              1           3           8         Jan 03, 2010
 Vancouver Homes  4           2           4         Jan 01, 2010

Каким будет утверждение, чтобы выбрать последний рейтинг по ключевому слову? Прямо сейчас у меня он возвращает повторяющиеся строки для ключевого слова ID.

Пожалуйста, спросите, нужна ли дополнительная информация, вот мое текущее заявление sql.

SELECT * 
  from keywords,
       keywordRankings 
 WHERE keywords.keywordID = keywordRankings.keywordID;

Мое текущее решение, которое работает для меня ...

SELECT s1.keywordID, keyword, rankingDate, ranking
FROM keywords s1, keywordRankings
WHERE keywordRankingRecord = (
SELECT MAX( s2.keywordRankingRecord )
FROM keywordRankings s2
WHERE s1.keywordID = s2.keywordID )     

1 Ответ

1 голос
/ 30 сентября 2010

Фундаментальная идея нахождения максимума среди группы объясняется здесь .

SELECT k.keyword,
       r1.*
FROM   keyword AS k
       LEFT JOIN keywordRanking AS r1
         ON k.keywordid = r1.keywordid
       LEFT JOIN keywordRanking AS r2
         ON k.keywordid = r2.keywordid
            AND r1.rankingdate < r2.rankingdate
WHERE  r2.ranking IS NULL  

выходы

+-----------------+-----------+-----------+---------+---------------------+
| keyword         | keywordID | rankingID | ranking | rankingDate         |
+-----------------+-----------+-----------+---------+---------------------+
| SEO             |         1 |         3 |       8 | 2010-01-03 00:00:00 | 
| Vancouver Homes |         2 |         4 |       4 | 2010-01-01 00:00:00 | 
+-----------------+-----------+-----------+---------+---------------------+
...