[英]SQL tricky order by
我正在嘗試訂購退貨套裝,但我很難讓它正確訂購。
我正在選擇字段,每個字段都有date_updated
和date_added
。 添加字段時, date_updated
為null,直到有更新,然后分配當前日期。
我需要通過將最新的條目放在BOTTOM上來排序我的列表,並將最舊的條目放在頂部。 所以如果添加一個項目,它應該直接到底部。 有沒有辦法將所有日期字段連接在一起,然后按最舊到最新排序,忽略更新或添加?
這可能聽起來有些令人困惑,但我已經嘗試了ORDER BY date_added DESC, date_updated ASC
以及類似的東西的多種組合,但它沒有做我需要做的事情。 我得到了date_added
排序的頂部部分,然后在那之下是date_updated
的單獨排序......
任何輸入在這里都會非常有用......
您可以嘗試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.