SQL: Как выбрать запись с самой последней прошедшей датой для каждой записи в другой таблице - PullRequest
0 голосов
/ 21 сентября 2010

Как я могу переформулировать эти два запроса в одном запросе на MySQL?

SELECT * FROM tvnetwork  
//this query gives me a list of TV networks

Но сети обычно меняют имена и логотипы, поэтому для каждой из найденных телевизионных сетей:

SELECT name, logo FROM tvnetworkinfo 
  WHERE id = $tvnetwork.id 
  AND date_since < NOW()
    ORDER BY date_since desc LIMIT 1

//this one gives me the most recent logo and name for the network

Я намеренно пропускаю СЛЕДУЮЩЕЕ изменение названия / логотипа. Например. Я хочу «NatGeo» вместо старого «National Geographic», но я также хочу «SciFi» вместо еще не реализованного «SyFy».

Я бы хотел получить все в одном запросе. ¿Есть ли способ сделать это?

1 Ответ

4 голосов
/ 21 сентября 2010

Чтобы получить самый последний список сетевых имен и логотипов, используйте:

SELECT x.name,
       x.logo
  FROM (SELECT tni.name,
               tni.logo
               CASE 
                 WHEN @name = tni.name THEN @rownum := @rownum + 1 
                 ELSE @rownum := 1
               END AS rank
               @name := tni.name
          FROM TVNETWORKINFO tni
       -- JOIN TVNETWORK tn ON tn.id = tni.id
          JOIN (SELECT @rownum := 0, @name := '') r
         WHERE tni.date_since < NOW()
      ORDER BY tni.name, tni.date_since DESC) x
 WHERE x.rank = 1

Я проигнорировал JOIN для таблицы TVNETWORK, он не был необходим для вывода.Раскомментируйте его, удалив перед ним двойной дефис в запросе, который я предоставил.

...