2012-11-07 44 views
0

這裏是我的表SQL - 如何通過降序時間戳來查詢親子記錄

+------------+-----------+---------------+--------------+ 
| CommentId | ParentId | Timestamp | CommentText | 
+------------+---------+-----------+--------------------+ 
|   1 |  NULL | Jan 1 2:00pm |   a | 
|   2 |  NULL | Jan 1 2:01pm |   b | 
|   3 |   1 | Jan 1 3:03pm |   c | 
|   4 |   2 | Jan 1 5:00pm |   d | 
|   5 |   2 | Jan 1 5:01pm |   e | 
|   6 |  NULL | Jan 1 8:00pm |   f | 
|   7 |   1 | Jan 1 7:00pm |   g | 
|   8 |   6 | Jan 1 9:04pm |   h | 
|   9 |   1 | Jan 1 8:05pm |   i | 
|   10 |  NULL | Jan 1 9:04pm |   k | 
+------------+-----------+---------------+--------------+ 

目前我使用下面的SQL返回母公司下令評論

SELECT c.* 
FROM Comments c 
ORDER BY COALESCE(c.ParentId, c.Id) 

結果是這樣的:

+------------+-----------+---------------+--------------+ 
| CommentId | ParentId | Timestamp | CommentText | 
+------------+---------+-----------+--------------------+ 
|   1 |  NULL | Jan 1 2:00pm |   a | 
|   3 |   1 | Jan 1 3:03pm |   c | 
|   7 |   1 | Jan 1 7:00pm |   g | 
|   9 |   1 | Jan 1 8:05pm |   i |  
|   2 |  NULL | Jan 1 2:01pm |   b |  
|   4 |   2 | Jan 1 5:00pm |   d | 
|   5 |   2 | Jan 1 5:01pm |   e | 
|   6 |  NULL | Jan 1 8:00pm |   f |  
|   8 |   6 | Jan 1 9:04pm |   h |  
|   10 |  NULL | Jan 1 9:04pm |   k | 
+------------+-----------+---------------+--------------+ 

我需要以降序時間戳順序得到結果。結果集應該是這樣的:

+------------+-----------+---------------+--------------+ 
| CommentId | ParentId | Timestamp | CommentText | 
+------------+---------+-----------+--------------------+   
|   10 |  NULL | Jan 1 9:04pm |   k | 
|   6 |  NULL | Jan 1 8:00pm |   f |  
|   8 |   6 | Jan 1 9:04pm |   h |  
|   2 |  NULL | Jan 1 2:01pm |   b |  
|   5 |   2 | Jan 1 5:01pm |   e | 
|   4 |   2 | Jan 1 5:00pm |   d | 
|   1 |  NULL | Jan 1 2:00pm |   a | 
|   9 |   1 | Jan 1 8:05pm |   i | 
|   7 |   1 | Jan 1 7:00pm |   g | 
|   3 |   1 | Jan 1 3:03pm |   c |  
+------------+-----------+---------------+--------------+ 

下不起作用:

SELECT c.* 
FROM Comments c 
ORDER BY COALESCE(c.ParentId, c.Id), Timestamp DESC 
+2

爲什麼你說它不起作用?我想你只是在你的訂單中缺少一個DESC – fthiella

+0

是的,如果我添加沒有時間戳的DESC,它將大部分我想要的。它唯一不做的事情是以降序排列回覆(parentId!= NULL)。我意識到我沒有在我的問題中以降序排列答覆。我已經更新了它。 – Bob

回答

1

我認爲這個查詢返回的順序行,你想:

SELECT c.* 
FROM Comments c 
ORDER BY 
    COALESCE(ParentID, ID) DESC, 
    ParentID is not null, 
    Timestamp DESC 

它的訂單如果它不爲空,則由ParentID以降序排列,否則按ID排序,然後按空格排在頂部,然後按時間戳desc。

+0

我收到一個語法錯誤 - 關鍵字'IS'附近的語法不正確。 – Bob

+1

你正在使用什麼DBMS?你可以嘗試用「ParentID不爲空」來描述這一行:'當ParentID爲NULL時,則爲0,否則爲1,' – fthiella

+0

是的,這很有效!謝謝! – Bob