您好,我遇到了与此问题类似的问题
Tricky "grouped" ordering in SQL
但似乎无法使其与日期一起使用
我的 table 有点
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
我希望我的结果按最接近现在的 future 日期排序,然后是最接近现在的过去日期(并按品牌分组)
我希望我的输出是这样的:
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
,请尝试:
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()))
当您在排序依据中指定多个列时,它将按第一列排序,如果第一列中的值相同,则按下一列排序。
此订单按 - 那么汽车品牌 - 日期是否是过去的日期。假的先排序。 (所以 future 优先),然后 - 日期的绝对差异(最小的数字在前)
注意:我放置了Car_Brand DESC
(反向字母顺序),因为这就是上面的方式。
感谢 OP 发现您想要更复杂的订单。但我认为这种方式更好:)
关于php - 按数据库中分组日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7603998/