在一个SQL  SERVER 2000数据库中有A,B两个表, 
A表存储帖子id,帖子标题,发表人,发表时间,发表内容, 
B表存储回复id,父贴id(等同于A中的帖子id),回复时间,回复内容 现在打算显示一个帖子列表,显示下列信息: 
帖子标题|发表人|回复次数|最后回复时间|发帖时间 以上帖子列表都先显示最新回复的帖子。
----------------------------------------------------SELECT A.status, A.id, A.subject AS 主题, A.writeName AS 发帖人, 
      A.writeDate AS 发帖时间, COUNT(B.forumSubjectID) AS 回复次数, MAX(B.restoreDate) 
      AS 最后回复时间
FROM forumSubject A LEFT OUTER JOIN
      forumRestore B ON A.id = B.forumSubjectID
GROUP BY A.status, A.id, A.subject, A.writeName, A.writeDate这样的SQL只能先显示显示最新发布的帖子,而不是先显示最新回复的帖子

解决方案 »

  1.   

    SELECT A.status, A.id, A.subject AS 主题, A.writeName AS 发帖人, 
      A.writeDate AS 发帖时间, COUNT(B.forumSubjectID) AS 回复次数, MAX(B.restoreDate) 
      AS 最后回复时间
    FROM forumSubject A LEFT OUTER JOIN
      forumRestore B ON A.id = B.forumSubjectID
    GROUP BY A.status, A.id, A.subject, A.writeName, A.writeDate
    order by 最后回复时间 desc
    需要加一个排序呀
      

  2.   

    order by MAX(B.restoreDate) desc
      

  3.   

    select a.* , t.*
    from a , b t
    where a.id = t.父贴id
    and t.回复时间 = (select max(回复时间) from b where 父贴id = t.父贴id)select a.* , t.*
    from a , b t
    where a.id = t.父贴id
    and not exists (select 1 from b where 父贴id = t.父贴id and 回复时间 > t.回复时间)
      

  4.   


    SELECT A.status, A.id, A.subject AS 主题, A.writeName AS 发帖人, 
      A.writeDate AS 发帖时间, COUNT(B.forumSubjectID) AS 回复次数, MAX(B.restoreDate) 
      AS 最后回复时间
    FROM forumSubject A LEFT OUTER JOIN
      forumRestore B ON A.id = B.forumSubjectID
    GROUP BY A.status, A.id, A.subject, A.writeName, A.writeDate
    order by 最后回复时间 desc
      

  5.   

    这样吧,要不然没回复的全沉底去了:order by isnull(MAX(B.restoreDate), A.writeDate) desc
      

  6.   

    在关键字 'SET' 附近有语法错误。
    在关键字 'FROM' 附近有语法错误。
    聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。
      

  7.   

    上面2句SQL只显示有回复的帖子,这不是我要的结果
      

  8.   

    列 'forumRestore.restoreDate' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
    列名 'forumRestore.restoreDate' 在 ORDER BY 子句中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
      

  9.   

    最好给出完整的表结构,测试数据,计算方法和正确结果.发帖注意事项
    http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
      

  10.   

    在SQL里运行是OK的,但在NET程序里运行不行
      

  11.   

    SELECT A.status, A.id, A.subject AS 主题, A.writeName AS 发帖人,  
      A.writeDate AS 发帖时间, COUNT(B.forumSubjectID) AS 回复次数, MAX(B.restoreDate)  
      AS 最后回复时间
    FROM forumSubject A LEFT OUTER JOIN
      forumRestore B ON A.id = B.forumSubjectID
    GROUP BY A.status, A.id, A.subject, A.writeName, A.writeDate
    --你的需求?这样的SQL只能先显示显示最新发布的帖子,而不是先显示最新回复的帖子
      

  12.   

    看,虽然最新回复的先显示出来了,但黑色数据部分没有按发帖时间排序,这是数据库里的情况
    string strSql = "select forumSubject.subject, forumSubject.writeName, forumSubject.writeDate, MAX(forumRestore.restoreDate) as restoreDate, COUNT(forumRestore.forumSubjectID) as lookNum from forumSubject LEFT OUTER JOIN forumRestore ON forumSubject.id = forumRestore.forumSubjectID group by forumSubject.subject, forumSubject.writeName, forumSubject.writeDate order by forumRestore.restoreDate desc";但程序里这样写又是另一种情况:
      

  13.   


    把你完整的语句贴出来吧,这样是没有问题的:SELECT A.status, A.id, A.subject AS 主题, A.writeName AS 发帖人, 
      A.writeDate AS 发帖时间, COUNT(B.forumSubjectID) AS 回复次数, MAX(B.restoreDate) 
      AS 最后回复时间
    FROM forumSubject A LEFT OUTER JOIN
      forumRestore B ON A.id = B.forumSubjectID
    GROUP BY A.status, A.id, A.subject, A.writeName, A.writeDate
    order by isnull(MAX(B.restoreDate), A.writeDate) desc
      

  14.   

    SELECT A.status, A.id, A.subject AS 主题, A.writeName AS 发帖人, 
      A.writeDate AS 发帖时间, COUNT(B.forumSubjectID) AS 回复次数, MAX(B.restoreDate) 
      AS 最后回复时间
    FROM forumSubject A LEFT OUTER JOIN
      forumRestore B ON A.id = B.forumSubjectID
    GROUP BY A.status, A.id, A.subject, A.writeName, A.writeDate
    order by isnull(MAX(B.restoreDate), A.writeDate) desc
    这样得到的结果是最新回复的帖子没有最先显示
      

  15.   


    这样呢?
    SELECT A.status, A.id, A.subject AS 主题, A.writeName AS 发帖人,  
      A.writeDate AS 发帖时间, COUNT(B.forumSubjectID) AS 回复次数, isnull(MAX(B.restoreDate),A.writeDate)  
      AS 最后回复时间
    FROM forumSubject A LEFT OUTER JOIN
      forumRestore B ON A.id = B.forumSubjectID
    GROUP BY A.status, A.id, A.subject, A.writeName, A.writeDate
    order by 最后回复时间 desc
      

  16.   

    那就这样了order by MAX(B.restoreDate desc, A.writeDate desc把没回复的全沉下去吧
      

  17.   

    SELECT A.status, A.id, A.subject AS 主题, A.writeName AS 发帖人, 
          A.writeDate AS 发帖时间, COUNT(B.forumSubjectID) AS 回复次数, MAX(B.restoreDate) 
          AS 最后回复时间
    FROM forumSubject A LEFT OUTER JOIN
          forumRestore B ON A.id = B.forumSubjectID
    GROUP BY A.status, A.id, A.subject, A.writeName, A.writeDate
    ORDER BY MAX(B.restoreDate) DESC, A.writeDate DESC楼上的可以