>我在MySQL中有一个表,其中包含字段:
- id - int;
- 日期 - 日期时间;
- 评分 - 十进制(3,2(;
依此类推,此选择中不需要其他字段。
表中大约有 6000 行。
我必须从过去 6 个月的按评级 ASC 排序的表中获取行,然后按 id ASC 排序的其他行。
我该怎么做?它会很快起作用吗?
我会做这样的事情来实现这一点:
select *
from tbl
order by case
when date >= DATE_ADD(curdate(), INTERVAL -6 MONTH) then
rating
else id
end ASC;
您需要确保过去 6 个月的所有记录都排在结果中,然后担心按rating
或id
排序。您可以通过对布尔值进行排序来做到这一点
date >= CURDATE() - INTERVAL 6 MONTH
首先,然后根据需要rating
或id
。例如:
SELECT *
FROM data
ORDER BY date >= CURDATE() - INTERVAL 6 MONTH DESC,
CASE WHEN date >= CURDATE() - INTERVAL 6 MONTH THEN rating
ELSE id
END