您可以将“日期”排序量化为 10 分钟的块,那么按 floor(unix_timestamp(date)/600) 排序如何,然后按优先级排序
SELECT * FROM converts
WHERE email='myemail@googlemail.com' AND status!='1'
ORDER BY floor(unix_timestamp(date)/600) ASC, priority DESC
虽然两个日期的间隔仍然可以小于 10 分钟,但跨越两个不同的 10 分钟“块”。也许这就足够了,但我认为完全按照您的要求做最好由应用程序完成。
(OP要求扩展解释......)
取两次跨越十分钟边界的时间,例如今天的 9:09 和 9:11:
- floor(unix_timestamp('2009-03-16 09: 09:00 ')/600) = 2061990
- floor(unix_timestamp('2009-03-16 09: 11:00 ')/600) = 2061991
假设 09:11 的优先级高于 09:09 - 它仍然会出现在09:09 行之后,因为它属于下一个 10 分钟的块,即使它仅相差 2 分钟。
所以这种方法是一种近似,但并没有解决最初所说的问题。
按照您陈述问题的方式,高优先级行可能会出现在几个小时(或几天或几个月!)之前记录的行之前,只要有一系列间隔小于 10 分钟的低优先级行。