2012-05-10 29 views
0
SELECT TOP (100) PERCENT MsgCount.msgcount 
    , c.userid 
    , c.aspnet_guid 
    , c.fname 
    , c.lname 
    , c.profileimagepath 
    , c.profilealbumid 
    , p1.msgdate 
    , SUBSTRING(p1.msgcontent, 0, 50) AS msgcontent 
    , p1.msgtouser 
FROM dbo.userprofile AS c 
INNER JOIN dbo.usermessages AS p1 
    ON c.userid = p1.msgfromuser 
LEFT OUTER JOIN dbo.usermessages AS p2 
    ON c.userid = p2.msgfromuser 
    AND (p1.msgdate < p2.msgdate 
      OR p1.msgdate = p2.msgdate 
      AND p1.msgid < p2.msgid) 
LEFT OUTER JOIN 
(
    SELECT msgfromuser 
     , COUNT(msgfromuser) AS msgcount 
    FROM dbo.usermessages 
    GROUP BY msgfromuser 
) AS MsgCount 
    ON MsgCount.msgfromuser = p1.msgfromuser 
WHERE  (p2.msgid IS NULL) 
ORDER BY p2.msgdate DESC 

回答

0

也許試圖通過排序:

p1.msgdate 

代替:

p2.msgdate 

這只是一個建議:)

0

我不確定數據在你的表中是什麼樣的,但是因爲你有一個到p2的左外連接,我假設你期望有時候沒有值和p2.msgdate爲空。通過僅由p2.msgdate(可能爲null的列)排序,您將無法獲得通過排序始終具有值的列來獲得的一致結果。也許按p1.msgdate排序,或者甚至合併(p2.msgdate,p1.msgdate)可能會給你更一致的結果。

SELECT TOP (100) PERCENT MsgCount.msgcount 
    , c.userid 
    , c.aspnet_guid 
    , c.fname 
    , c.lname 
    , c.profileimagepath 
    , c.profilealbumid 
    , p1.msgdate 
    , SUBSTRING(p1.msgcontent, 0, 50) AS msgcontent 
    , p1.msgtouser 
FROM dbo.userprofile AS c 
INNER JOIN dbo.usermessages AS p1 
    ON c.userid = p1.msgfromuser 
LEFT OUTER JOIN dbo.usermessages AS p2 
    ON c.userid = p2.msgfromuser 
    AND (p1.msgdate < p2.msgdate 
      OR p1.msgdate = p2.msgdate 
      AND p1.msgid < p2.msgid) 
LEFT OUTER JOIN 
(
    SELECT msgfromuser 
     , COUNT(msgfromuser) AS msgcount 
    FROM dbo.usermessages 
    GROUP BY msgfromuser 
) AS MsgCount 
    ON MsgCount.msgfromuser = p1.msgfromuser 
WHERE  (p2.msgid IS NULL) 
ORDER BY p1.msgdate, p2.msgdate DESC 
相關問題