2014-10-17 1 views
0

после абстрактного сценария. У меня 2 таблицы. Один из них содержит «сообщения», а остальные «комментарии» . Если вы создаете новый «пост», добавляется новый «комментарий» типа «initial». Всякий раз, когда вы теперь добавляете настоящий комментарий, он получает postID и тип типа «картинка», «текст», «фильм» ...SQL Join Tables - вторая новая запись к связанной основной записи в другой таблице

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

SELECT post.ID,post.Title,post.Author,post.CreateDate, 
comment.Type,comment.Text,comment.CreateDate 
FROM Posts as post 
INNER JOIN Comments as comments on post.ID = comment.PostID 

Это дает мне информацию о количестве комментариев. Теперь я хочу просто иметь самую первую «настоящую» дату комментария, стоящую рядом с createDate сообщения (где comment.Type! = 'Initial')

Не знаю, как это сделать. Может ли кто-нибудь помочь мне в этом случае? Должна быть обеспечена возможность запустить его и на MS SQL 2000 ...

Спасибо заранее ...

ответ

1

попробовать это:

SELECT post.ID,max(post.Title),max(post.Author),min(post.CreateDate), 
min(comment.CreateDate), 
datediff(mi,min(post.CreateDate),min(comment.CreateDate)) as 'first comment in minutes' 
FROM Posts as post 
INNER JOIN Comments as comments on post.ID = comment.PostID 
where comment.Type != 'initial' 
group by post.id 
+0

Это прекрасно работает! Спасибо. Если у вас есть время, не могли бы вы добавить короткое объяснение? – mJay

+0

Я рад, что это помогает. Взгляните на это для Aggregate Funcions: http://msdn.microsoft.com/en-us/library/ms173454.aspx – Horaciux

+0

Я использовал 'min (comment.CreateDate)' для определения первого реального комментария после фильтрации 'where comment. Тип! = 'Initial'' – Horaciux