C# Hello需要有关如何在论坛主题/消息的SQL Server新闻中执行此操作的帮助吗

C# Hello需要有关如何在论坛主题/消息的SQL Server新闻中执行此操作的帮助吗,c#,asp.net,sql-server,C#,Asp.net,Sql Server,好的,我有三张桌子可以互相交流 ForumTopic t ForumMessage m ForumUser u 我想做的是得到每个主题的第一条信息 我试过这个 SELECT m.[Message], m.[TopicID], m.[Posted], u.Name, t.[Views], t.NumPosts, t.Topic FROM [ForumMessage] m INNER JOIN ( SELECT TopicID, Topic, [Views], NumP

好的,我有三张桌子可以互相交流

ForumTopic t
ForumMessage m
ForumUser u
我想做的是得到每个主题的第一条信息

我试过这个

  SELECT
   m.[Message], m.[TopicID], m.[Posted], u.Name, t.[Views], t.NumPosts,
   t.Topic
   FROM [ForumMessage] m
   INNER JOIN ( SELECT TopicID, Topic, [Views], NumPosts, ForumID
    FROM [ForumTopic]
    GROUP BY TopicID, Topic, [Views], NumPosts, ForumID ) t ON t.TopicID = m.TopicID
   INNER JOIN [ForumUser] u
   ON u.UserID = m.UserID
   WHERE t.ForumID IN(1,2)
   ORDER BY m.Posted DESC;
结果如下所示

 Message    TopicID Posted  Name    Views   NumPosts    Topic
    6   2009-07-20 18:14:06.270 Ravenal 26  3   GENESIS 2.5.1a RELEASE
    6   2009-07-20 18:08:51.027 Ryan    26  3   GENESIS 2.5.1a RELEASE
    6   2009-07-20 17:06:33.550 Ravenal 26  3   GENESIS 2.5.1a RELEASE
    4   2009-07-17 14:22:47.560 Ravenal 14  1   MyGameTools IRC
    3   2009-07-17 01:09:22.403 Ravenal 43  1   GENESIS 2.5.0b RELEASE
    2   2009-07-17 00:48:30.873 Ravenal 44  2   GENESIS 2.5.0a RELEASE
    2   2009-07-16 23:08:44.830 Ravenal 44  2   GENESIS 2.5.0a RELEASE
    1   2009-07-16 23:03:11.790 Ravenal 20  1   Welcome to MyGameTools
所以我想弄清楚如何让它看起来像这样

 Message    TopicID Posted  Name    Views   NumPosts    Topic
    6   2009-07-20 18:14:06.270 Ravenal 26  3   GENESIS 2.5.1a RELEASE
    4   2009-07-17 14:22:47.560 Ravenal 14  1   MyGameTools IRC
    3   2009-07-17 01:09:22.403 Ravenal 43  1   GENESIS 2.5.0b RELEASE
    1   2009-07-16 23:03:11.790 Ravenal 20  1   Welcome to MyGameTools
任何帮助都将不胜感激。

它为一条消息提供了多条记录,因为您正在将其与用户表连接&消息有多个用户(主题4、3、1除外)


编辑:您必须通过限制提供1条记录(按最大值(PostedDateTime))来减少外部查询的输出。

您是否尝试使用派生表从ForumMessages表中获取每个主题的最大发布日期时间

乙二醇


为那些可能会做我正在做的同样事情的人提供参考…这是在Darren的帮助下,我对结果的解决方案

SELECT  m.[Message], m.[TopicID], m.[Posted], u.Name, t.[Views], t.NumPosts,   t.Topic   FROM 
( SELECT TopicID, Min(Posted) MaxPosted
  FROM ForumMessage
  GROUP BY TopicID ) MaxMessage
INNER JOIN [ForumMessage] m   
  ON m.TopicID = maxMessage.TopicID
  AND m.Posted = maxMessage.MaxPosted
INNER JOIN [ForumTopic] t
  ON t.TopicID = m.TopicID
INNER JOIN [ForumUser] u
   ON u.UserID = m.UserID   
WHERE t.ForumID IN(1,2)  
ORDER BY m.[Posted] DESC

实际上,用户与此无关…他们都是由一个人发布的,除了另一个人。Ravenal=Me,Ryan是在主题#6中发布的人…我试图做的事情是按ForumMessage的TopicID分组。在MySQL中,我可以很容易地做到这一点,但在MSSQL的TopicID a date列中这样做时,我会迷失方向(至少看起来是这样)?发布的是varchar列吗?No TopicID是一个整数唯一标识列:)与MessageId相同很高兴问题得到解决。我想格式设置会让它看起来有点奇怪。这非常有效,伙计,谢谢…我只需要修改它以显示第一篇文章,而不是其他类似的内容
SELECT  m.[Message], m.[TopicID], m.[Posted], u.Name, t.[Views], t.NumPosts,   t.Topic   FROM 
( SELECT TopicID, Min(Posted) MaxPosted
  FROM ForumMessage
  GROUP BY TopicID ) MaxMessage
INNER JOIN [ForumMessage] m   
  ON m.TopicID = maxMessage.TopicID
  AND m.Posted = maxMessage.MaxPosted
INNER JOIN [ForumTopic] t
  ON t.TopicID = m.TopicID
INNER JOIN [ForumUser] u
   ON u.UserID = m.UserID   
WHERE t.ForumID IN(1,2)  
ORDER BY m.[Posted] DESC