我正在開發一個Facebook類型的應用程序,我正在嘗試開發一個很好的查詢來獲取最新的消息。消息可以是新線程(parentID空guid)或回覆。什麼是我需要的是一個查詢來獲得第10位,或10-20,或20-30線程或者是最新的或有latsest答覆,我希望你的想法SQL幫助,heirarchical表數據
這是表
CREATE TABLE [dbo].[Messages](
[Id] [uniqueidentifier] NOT NULL,
[ParentId] [uniqueidentifier] NOT NULL,
[message] [nvarchar](max) NOT NULL,
[MessageDateTime] [datetime] NOT NULL
)
我有一個查詢,這種作品,因爲它可以得到前10名,20名3o結果等。
SELECT ym.* FROM
(
SELECT top 20 TopId, MAX(MessageDateTime) as Mess FROM
(
SELECT
CASE ParentId WHEN '00000000-0000-0000-0000-000000000000' THEN Id ELSE ParentId END AS TopId, MessageDateTime
FROM Messages
) As Temp
GROUP BY TopId order by Mess desc)
AS table2
INNER JOIN Messages ym
ON ym.id = TopId
主要問題是可能沒有回覆,因此情況statemnt。 提前感謝您提供的任何幫助。
如果在沒有父項時允許ParentId爲NULL,這將有所幫助。然後你可以使用合併而不是案例。數據描述時依然咀嚼答案。 –
看起來這隻會返回沒有孩子的父消息和/或消息。這是在一個單獨的查詢處理,或者這也應該返回兒童? –