Проблема объединения таблиц, где объединяемая таблица должна быть упорядочена до группировки - PullRequest
2 голосов
/ 26 февраля 2010

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

У меня есть две таблицы (представлены только соответствующие столбцы):

| Thread
+----------
| ThreadID 

| Post
+----------
| PostID
| ThreadID
| Posted (Datetime)

Теперь я хочу присоединиться к теме и сообщению, группируя по идентификатору темы. Но я хочу заказать по почте. Размещено в порядке убывания. Говоря простым языком, я хочу присоединиться к обсуждению самой последней публикации, касающейся этой темы.

Мой SQL пока:

SELECT Thread.ThreadID, Post.PostID, Post.Created
FROM Thread
LEFT JOIN Post ON Post.ThreadID = Thread.ThreadID
GROUP BY Thread.ThreadID
ORDER BY Post.Created DESC 

Это делает работу, но порядок объединения не является правильным, так как порядок, конечно, применяется только после того, как группировка выполнена.

Конечно, должен быть способ достичь того, что мне нужно?

Ответы [ 2 ]

3 голосов
/ 26 февраля 2010
select t.ThreadID, p.PostID, p.Posted
from Thread t
inner join (
    select ThreadID, Max(Posted) as MaxPosted
    from Post
    group by ThreadID       
) pm on t. ThreadID = pm.ThreadID
inner join Post p on pm.ThreadID = p.ThreadID and pm.MaxPosted = p.Posted
order by p.Posted desc
1 голос
/ 26 февраля 2010

Используйте как идентификатор потока, так и дату создания в заказе по пункту

SELECT Thread.ThreadID, Post.PostID, Post.Created
FROM Thread
LEFT JOIN Post ON Post.ThreadID = Thread.ThreadID
GROUP BY Thread.ThreadID
ORDER BY Thread.ThreadID, Post.Created DESC 
...