2013-04-06 11 views
7

У меня есть эти таблицы:SQL присоединиться слева получить MAX (дата)

  • уведомление
    • ID INT
    • CDate DATETIME
    • ...

  • тему
    • идентификатор
    • имя

  • notice_theme
    • id_notice
    • id_theme

Я хочу, чтобы получить последние уведомления для каждой темы.

SELECT id_theme, n.id 
FROM notice_theme 
LEFT JOIN (
    SELECT id, cdate 
    FROM notice 
    ORDER BY cdate DESC 
) AS n ON notice_theme.id_notice = n.id 
GROUP BY id_theme 

Результат не очень хороший. Идея ? Благодарю.

+1

Где ваш MAX (дата)? – hjpotter92

+0

Нет гарантий, что ORDER BY объединенной таблицы будет сохранен. Поместите ORDER BY во внешний выбор. – flup

+0

Вам нужно добавить Max (n.cdate) – Rohit

ответ

6

Существует так много способов решить эту проблему, но я привык делать это таким образом. Дополнительный подзапрос необходим, чтобы отдельно рассчитать последние cDate за каждые ID.

SELECT a.*, c.* 
FROM theme a 
     INNER JOIN notice_theme b 
      ON a.ID = b.id_theme 
     INNER JOIN notice c 
      ON b.id_notice = c.ID 
     INNER JOIN 
     (
      SELECT a.id_theme, MAX(b.DATE_CREATE) max_date 
      FROM notice_theme a 
        INNER JOIN notice b 
         ON a.ID_Notice = b.ID 
      GROUP BY a.id_theme 
     ) d ON b.id_theme = d.id_theme AND 
       c.DATE_CREATE = d.max_date 
+1

Спасибо за ответ, с вашим запросом (@JW): > id_theme ---- id_notice ---- date_create > 2 --------- --2 ------------ 2013-03-31 09:18:21 > 4 ----------- 2 ---------- --2013-03-31 09:18:21 > 1 ----------- 7 ------------ 2013-03-31 23:27:28 > 2 ----------- 7 ------------ 2013-03-31 23:27:28 > 4 ----------- 11 ----------- 2013-02-16 04:40:21 > 5 ----------- 12 ----------- 2013- 02-05 20:18:21 > 4 ----------- 13 ----------- 2013-03-31 23:27:28 > 2 --- -------- 14 ----------- 2013-03-15 20:18:21 И с GROUP BY a.id, у меня такая же проблема с моим запросом:/ – user2252137

+0

можете ли вы предоставить образцы записей с вашим ожидаемым результатом? –

+0

http://www.2shared.com/document/nJNTNfCz/example.html – user2252137