SQL-запрос - упорядочить по дате, но также сгруппировать

ОК, дамы и господа, я был бы очень признателен за помощь:

Это моя таблица:

ID     postID    replyID    content    entry_date  
1       0         40          hey         12/7  
2       0         40          hi          12/8  
3       0         40          whatsup     12/9  
4       2         40          why?        12/10  
5       0         40          who?        12/11  

Мне нужно запустить запрос, чтобы получить его следующим образом:

ID     postID    replyID    content    entry_date  
1       0         40          hey         12/7  
2       0         40          hi          12/8  
4       2         40          why?        12/10  
3       0         40          whatsup     12/9  
5       0         40          who?        12/11  

Вы увидите, что ID 3 и 4 поменялись местами. Таким образом, в основном мне нужно ASC по entry_date, если только ID = POSTID, тогда мне нужно сгруппировать эти два, а также ASC по entry_date для этих двух.

Вот что я пробовал, но я полностью потерян:

SELECT t1.ID, t1.postID, t1.replyID, t1.content, t1.entry_date
  FROM discussion t1, discussion t2
 WHERE t1.replyID = '40' AND t1.ID = t2.postID
 ORDER BY t1.entry_date ASC

Который в основном ничего не делает, но находит, где строка ID = строка postID


person JohnnyRocket    schedule 27.12.2011    source источник
comment
Поскольку ни в одном из ваших данных нет ID == PostID, ваше объяснение ваших требований сбивает с толку.   -  person Jonathan Leffler    schedule 27.12.2011
comment
Да. Не могли бы вы перечитать и отредактировать свой вопрос?   -  person Tom Haws    schedule 28.12.2011


Ответы (1)


Вы можете добавить оператор CASE к предложению ORDER BY.

ORDER BY 
  CASE WHEN postID = 0 THEN ID ELSE postID END
  , entry_date

при этом вы можете полностью отказаться от объединения, и весь оператор может быть упрощен до

SELECT  ID
        , postID
        , replyID
        , content
        , entry_date
FROM    discussion
ORDER BY 
       CASE WHEN postID = 0 THEN ID ELSE postID END
       , entry_date

Обратите внимание, что я предполагаю, что дата входа представляет собой столбец DATETIME, а не столбец VARCHAR.

person Lieven Keersmaekers    schedule 27.12.2011