2013-04-11 136 views
3

我有一張如下所示的表格。如何按日期排序,但按某個列值排序SQL

my_id | date 
------------------- 
    1 | 2013-04-01 
    1 | 2013-04-02 
    2 | 2013-04-03 
    1 | 2013-04-04 
    3 | 2013-04-05 
    2 | 2013-04-06 

我想獲得這個結果的SQL查詢。

my_id | date 
------------------- 
    2 | 2013-04-06 
    2 | 2013-04-03 
    3 | 2013-04-05 
    1 | 2013-04-04 
    1 | 2013-04-02 
    1 | 2013-04-01 

所以我希望所有具有相同的my_id與日期降序一起。並且my_id的組應根據組中的最新日期降序排列。

這就像一個線程化的對話,你可以說,是my_id是對話ID和日期是該對話的帖子的日期。因此,在列表中顯示時,與最新帖子的對話應該是最重要的。

跟進問題 如果my_id爲NULL,則不應將它們組合在一起,但仍按日期排序。這將是,如果他們不是一個對話的一部分,例如。

my_id | date 
------------------- 
    1 | 2013-04-01 
    1 | 2013-04-02 
    2 | 2013-04-03 
    1 | 2013-04-04 
NULL | 2013-04-05 
    2 | 2013-04-06 
NULL | 2013-04-07 

然後上面的表格會是這樣

my_id | date 
------------------- 
NUll | 2013-04-07 
    2 | 2013-04-06 
    2 | 2013-04-03 
NULL | 2013-04-05 
    1 | 2013-04-04 
    1 | 2013-04-02 
    1 | 2013-04-01 

回答

3

嘗試以下操作:

SELECT A.my_id, A.YourDate 
FROM YourTable A 
INNER JOIN (SELECT my_id, MAX(YourDate) MaxDate 
      FROM YourTable 
      GROUP BY my_id) B 
    ON A.my_id = B.my_id 
ORDER BY B.MaxDate DESC, A.YourDate DESC 

修訂

不知道這是否是你想要的是什麼NULL值,但無論如何:

SELECT A.my_id, A.YourDate 
FROM YourTable A 
LEFT JOIN (SELECT my_id, MAX(YourDate) MaxDate 
      FROM YourTable 
      WHERE my_id IS NOT NULL 
      GROUP BY my_id) B 
    ON A.my_id = B.my_id 
ORDER BY COALESCE(B.MaxDate,A.YourDate) DESC, A.YourDate DESC 
+0

很酷的工作。隨後的問題:)可以說,my_id可以是NULL(帖子不是對話的一部分),它們應該按日期排序,但不能組合在一起。這可能嗎? – Wox 2013-04-11 20:50:41

+0

@Wox很高興工作。 – Lamak 2013-04-11 20:51:31

+0

@Wox更新了我的回答,雖然我不確定這是否是你想要的 – Lamak 2013-04-11 20:59:42