Как получить 1 верхнюю часть связанной таблицы? - PullRequest
1 голос
/ 08 июня 2011

Хорошо, скажем, у меня есть две таблицы.

Вопрос

  • questionID
  • QuestionDescription

Ответ

  • AnswerID
  • QuestionID
  • AnswerDescription
  • CreatedDate

И я хочу создать запрос, который возвращает вопрос и последнийсозданный ответ, подобный этим столбцам

QuestionID NameN QuestionDescription CreatedDate

Возможно ли это?

Я могу сделать запрос, который получает все комбинации вопросов и ответов

SELECT q.QuestionID, q.QuestionName, a.AnswerDescription, a.CreatedDate FROM QUESTION q
INNER JOIN ANSWER a
ON q.questionID = a.QuestionID

но есть ли способ, которым я могу сделать что-то подобное, но сделать так, чтобы он возвращал только последний ответ вместо всех?

Ответы [ 3 ]

4 голосов
/ 08 июня 2011

Чтобы получить за вопрос, SQL Server 2005 +

SELECT
   q.QuestionID, q.QuestionName,
   a.AnswerDescription, a.CreatedDate
FROM
    QUESTION q
    CROSS APPLY
    (
     SELECT TOP 1 a2.AnswerDescription, a2.CreatedDate
     FROM ANSWER a2
     WHERE q.questionID = a2.QuestionID
     ORDER BY a2.CreatedDate DESC
    ) a
4 голосов
/ 08 июня 2011
SELECT q.QuestionID, 
       q.QuestionName, 
       a.AnswerDescription, 
       a.CreatedDate
FROM QUESTION AS q
  INNER JOIN (SELECT QuestionID,
                     AnswerDescription,
                     CreatedDate,
                     ROW_NUMBER() OVER(PARTITION BY QuestionID 
                                       ORDER BY CreatedDate DESC) AS rn
              FROM ANSWER) AS a       
    ON q.questionID = a.QuestionID AND 
       a.rn = 1
0 голосов
/ 08 июня 2011
SELECT top 1 q.QuestionID, q.QuestionName, a.AnswerDescription, a.CreatedDate FROM QUESTION q
INNER JOIN ANSWER a
ON q.questionID = a.QuestionID
ORDER BY a.CreatedDate DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...