簡體   English   中英

SQL棘手的順序

[英]SQL tricky order by

我正在嘗試訂購退貨套裝,但我很難讓它正確訂購。

我正在選擇字段,每個字段都有date_updateddate_added 添加字段時, date_updated為null,直到有更新,然后分配當前日期。

我需要通過將最新的條目放在BOTTOM上來排序我的列表,並將最舊的條目放在頂部。 所以如果添加一個項目,它應該直接到底部。 有沒有辦法將所有日期字段連接在一起,然后按最舊到最新排序,忽略更新或添加?

這可能聽起來有些令人困惑,但我已經嘗試了ORDER BY date_added DESC, date_updated ASC以及類似的東西的多種組合,但它沒有做我需要做的事情。 我得到了date_added排序的頂部部分,然后在那之下是date_updated的單獨排序......

任何輸入在這里都會非常有用......

嘗試

order by coalesce(date_updated, date_added)

COALESCE DOC

您可以嘗試CASE語句

SELECT 
    firstname, 
    lastname, 
    date_added, 
    date_updated, 
    CASE date_updated IS NULL 
        THEN date_added 
        ELSE date_updated 
    END CASE AS order_date  
FROM mytable 
ORDER BY order_date DESC

這樣做是檢查date_updated是否為null,然后將date_added的值放入新列。 如果沒有,則將date_updated置於其中。 新列稱為order_date ,用於排序。

您還可以在ORDER BY子句中添加CASE語句,但這可能會降低查詢速度,因為它必須在索引與構造數據時進行連接。 雖然沒有定論,但如果在SELECT與ORDER BY中使用CASE,我發現性能略有提升。

Order By使用CASE

ORDER BY CASE WHEN date_updated IS NULL
              THEN 0 
              ELSE 1
          END DESC, date_added DESC
Order by IsNull(DateUpdated,DateAdded)

會是一種方式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM