0
SQL小提琴:http://sqlfiddle.com/#!15/1da00/5訂購CREATED_DATE如果少於1個月,否則排序updated_date
我有一個表,看起來是這樣的:
products
+-----------+-------+--------------+--------------+
| name | price | created_date | updated_date |
+-----------+-------+--------------+--------------+
| chair | 50 | 10/12/2016 | 1/4/2017 |
| desk | 100 | 11/4/2016 | 12/27/2016 |
| TV | 500 | 12/1/2016 | 1/2/2017 |
| computer | 1000 | 12/28/2016 | 1/1/2017 |
| microwave | 100 | 1/3/2017 | 1/4/2017 |
| toaster | 20 | 1/9/2017 | 1/9/2017 |
+-----------+-------+--------------+--------------+
我想訂購在此表如果產品創建時間不到30天,那麼結果應該首先顯示(並按更新日期排序)。如果產品被創造30個或更多天前,我希望它後顯示(並經更新的日期是組內排列)
這是結果應該是什麼樣子:
products - desired results
+-----------+-------+--------------+--------------+
| name | price | created_date | updated_date |
+-----------+-------+--------------+--------------+
| toaster | 20 | 1/9/2017 | 1/9/2017 |
| microwave | 100 | 1/3/2017 | 1/4/2017 |
| computer | 1000 | 12/28/2016 | 1/1/2017 |
| chair | 50 | 10/12/2016 | 1/4/2017 |
| TV | 500 | 12/1/2016 | 1/2/2017 |
| desk | 100 | 11/4/2016 | 12/27/2016 |
+-----------+-------+--------------+--------------+
我VE開始寫這個查詢:
SELECT *,
CASE
WHEN created_date > NOW() - INTERVAL '30 days' THEN 0
ELSE 1
END AS order_index
FROM products
ORDER BY order_index, created_date DESC
但只有少created_date
腋臭30天前帶上行,然後created_date
訂購。我想在那裏order_index
= 1通過updated_date
這並沒有給出正確的結果。另外,你可以使用'order_index'。我打算爲'order_index'增加更多的值,所以不應該被取出。 – Xecure
oops。 order_index。很難使用,計算列只能按位置引用,所以它們不能用於表達式。 – Jasen