[英]ordering by grouped dates in database
嗨,有一個與此問題類似的問題
但似乎無法使其與日期一起使用
我的桌子有點
Car_ID Car_Brand Car_Model Car_launch_date
1 Ford Fiesta 12-12-2011
2 Ford Mustang 09-04-2008
3 Ford Focus 10-02-2012
4 Honda Civic 11-05-2012
6 Honda Jazz 02-05-2011
7 Toyota Prius 11-10-2011
我希望我的結果按最接近現在的將來日期排序,然后再跟最接近現在的過去日期排序(並按品牌分組)
我希望我的輸出是這樣的:
Car_ID Car_Brand Car_Model Car_launch_date
7 Toyota Prius 11-10-2011
1 Ford Fiesta 12-12-2011
3 Ford Focus 10-02-2012
2 Ford Mustang 09-04-2008
4 Honda Civic 11-05-2012
6 Honda Jazz 02-05-2011
您在數據庫中的DATE
是DATE
對象還是字符串? 因為如果您嘗試將它們作為字符串訂購,那將行不通!
如果日期是DATE
,請嘗試:
SELECT * from my_table
ORDER BY Car_Brand DESC,
Car_launch_date < NOW(),
ABS(DATEDIFF(Car_launch_date, NOW()))
如果它們是字符串,請嘗試:
SELECT * from my_table
ORDER BY Car_Brand DESC,
DATE(Car_launch_date) < NOW(),
ABS(DATEDIFF(DATE(Car_launch_date), NOW()))
當您在一個排序依據中指定多個列時,如果第一列中的值相同,則它將按第一列排序,然后按第二列排序。
此訂單的排序方式-汽車品牌,然后-日期是否過去。 虛假首先被排序。 (因此,未來優先),然后-日期的絕對差(最小的數字優先)
注意:我放Car_Brand DESC
(反向字母順序),因為這就是上面的方法。
感謝OP的發現,您想要更復雜的訂單。 但我認為這樣更好:)
使用以前的帖子作為補充,更好的答案是:
GROUP BY Car_Brand
ORDER BY
CASE WHEN Car_launch_date >= NOW() THEN 0 ELSE 1 END,
CASE WHEN Car_launch_date >= NOW() THEN DATEDIFF(Car_launch_date, NOW()) ELSE DATEDIFF(NOW(), Car_launch_date) END
該查詢使用條件語句來首先確定它是將來的日期還是過去的日期。 如果是將來,則輸出0,過去則輸出1,因此將來的日期將排在第一位,過去的日期將排在第二位。 接下來是另一個case語句,用於檢測如何計算現在和啟動日期之間的天數差。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.