4

我有两张桌子:COMMENTCOMMENTHISTORY

现在我需要从两个表中选择单元格,如下所示:

SELECT c.Id, c.Userid, ch.Text, ch.Timestamp
FROM COMMENT c, COMMENTHISTORY ch
WHERE ch.CommentId = c.Id
ORDER BY ch.Timestamp DESC

工作正常。唯一的问题是COMMENTHISTORY每个都有几行COMMENT,因此SELECT最终会为每个评论检索几行。

我需要的是为每条评论检索一行。ch.Text 和 ch.Timestamp 与最新相关行匹配的COMMENTHISTORY行。

关于如何做到这一点的任何想法?

谢谢。

4

9 回答 9

1

这将解决您的问题

SELECT c.Id, c.Userid, ch.Text, ch.Timestamp
FROM COMMENT c LEFT JOIN COMMENTHISTORY ch on C.ID = ch.comment_id
WHERE ch.CommentId = c.Id
GROUP BY c.id
ORDER BY ch.Timestamp DESC
于 2013-06-27T07:36:56.973 回答
0
SELECT c.Id, c.Userid, ch.Text, max(ch.Timestamp)
FROM COMMENT c, COMMENTHISTORY ch
WHERE ch.CommentId = c.Id
GROUP BY C.ID, c.userid, ch.text
于 2013-06-27T07:33:16.483 回答
0

这可能会帮助您:

SELECT c.Id, c.Userid, ch.Text, ch.Timestamp
FROM COMMENT c LEFT JOIN COMMENTHISTORY ch ON ch.CommentId = c.Id
ORDER BY ch.Timestamp DESC
于 2013-06-27T07:33:43.203 回答
0

用这个:

SELECT c.Id, c.Userid, Max(ch.Text), max(ch.Timestamp)
FROM COMMENT c, COMMENTHISTORY ch
WHERE ch.CommentId = c.Id
GROUP BY C.ID, c.Userid
ORDER BY ch.Timestamp DESC
于 2013-06-27T07:35:26.087 回答
0
  SELECT c.Id, c.Userid, max(ch.Timestamp),max(ch.text)
    FROM COMMENT c, COMMENTHISTORY ch
    WHERE ch.CommentId = c.Id
    Group By  c.Id, c.Userid
    ORDER BY ch.Timestamp DESC
于 2013-06-27T07:35:33.633 回答
0

此查询将为CommentHisotry给定评论 id 选择最新记录的最后一条记录:

WITH LastComment AS
(
    SELECT CH.CommentId, MAX(CH.Timestamp) as Date
    FROM COMMENTHISTORY CH
    GROUP BY CH.CommentId
)

SELECT c.Id, c.Userid, ch.Text, ch.Timestamp
FROM COMMENT c
INNER JOIN LastComment lc ON LC.CommentId = c.Id
INNER JOIN COMMENTHISTORY ch ON ch.CommentId = lc.CommentId and ch.TimeStamp = lc.Date
ORDER BY ch.Timestamp DESC
于 2013-06-27T07:37:58.993 回答
0

尝试使用内部连接并将您的条件放在 Where 子句中。有关更多信息,请查看以下内容:-加入选择图

于 2013-06-27T07:39:43.623 回答
0

询问:

SELECT c.Id, 
       c.Userid, 
       ch.Text, 
       ch.Timestamp
FROM COMMENT c
INNER JOIN COMMENTHISTORY ch
  ON ch.CommentId = c.Id
WHERE ch.Timestamp = (SELECT MAX(ch2.Timestamp)
                      FROM COMMENTHISTORY ch2
                      WHERE ch2.CommentId = c.Id )
ORDER BY ch.Timestamp DESC
于 2013-06-27T07:41:56.207 回答
0

这个应该做...

;WITH CTE AS
(
    SELECT  ch.CommentId, ch.Text, ch.TimeStamp, ROW_NUMBER() OVER (PARTITION BY     ch.CommentId ORDER BY ch.TimeStamp DESC) RowNum
    FROM    COMMENTHISTORY ch
)
SELECT          c.Id, c.Userid, CTE.Text, CTE.TimeStamp
FROM            COMMENT c
    INNER JOIN  CTE ON c.Id = CTE.CommentId
WHERE           RowNum = 1
于 2013-06-27T08:30:53.493 回答