2017-06-29 12 views
0

我在查詢中排序時遇到了一些問題。MYSQL ORDER BY TIMESTAMPDIFF兩欄如果

所以,我需要具有在該表(remind_date)當前時間與柱之間的差值第一顯示命令必須是(-70 - 0)ASC 如果remindDAteDIFf是不是在我的範圍比爲了通過status_updated DESC在其他情況順序依據(status_updated)DESC。

我寫此查詢:

SELECT TIMESTAMPDIFF(MINUTE,remind_date, NOW()) as remindDAteDIFf, 
order_id, remind_date, status_id, status_updated 
FROM s_order 
ORDER BY IF(remindDAteDIFf BETWEEN -70 AND 0, remind_date, status_updated) DESC; 

所以我就下一個結果enter image description here

這是很好的,但我需要排序ASC現場remindDAteDIFf和status_updated BY DESC。 (Firts需要顯示remindDAteFf = -16和-28相比) 我試過

IF(remindDAteDIFf BETWEEN -70 AND 0, remind_date ASC, status_updated DESC) 

但我已經遇到錯誤至極說,查詢是incorrrect

回答

0

我想你想在order by三個鍵:

ORDER BY (remindDAteDIFf BETWEEN -70 AND 0) DESC, -- put these first 
     (CASE WHEN remindDAteDIFf BETWEEN -70 AND 0 THEN remind_date END) ASC, 
     status_updated DESC; 

第一個鍵將「最近」值放在第一位。第二個訂單只是由remind_date。第三個由status_updated命令其餘的。

+0

感謝重播。不幸的是,它首先將所有的數據排序爲:reminDAteDIFf DESC,然後是status_updated。雖然我需要複合訂單 - 如果alertsDAteDIFf不在我的範圍內,而不是訂單通過status_updated DESC – YuriiChmil

+0

「我需要第一個顯示訂單,其中當前時間和表中的列(reminisation_date)之間的差異必須是(-60 - 0)ASC in其他情況排序依據(status_updated)DESC。「這個答案是我解釋你的問題所要求的。我離開了「70」而不是「60」,因爲這就是你的代碼的措辭。 –

+0

那麼,也許我錯了解釋我需要什麼)我糾正了一點點描述 – YuriiChmil

0

試試這個,使用減去至desc相反:

ORDER BY IF(
    remindDAteDIFf BETWEEN -70 AND 0, 
    0 - unix_timestamp(remind_date), 
    unix_timestamp(status_updated)) DESC; 
0

我找到解決辦法:

IF(remindDateDiff BETWEEN -70 AND 0, remindDateDiff, -71) DESC , status_updated DESC