我有这个SQL语句:
SELECT * FROM converts WHERE email='myemail@googlemail.com' AND status!='1' ORDER BY date ASC, priority DESC
这只是按日期排序,但我想让我的专栏"优先"更具权威性.我怎样才能做到这一点?
它应该先按日期排序,但如果两个记录之间的时间是10分钟,那么我希望优先接管.我怎样才能在我的SQL语句中执行此操作,或者这必须在我的应用程序逻辑中?我希望我能在我的SQL语句中做到这一点.
谢谢大家的帮助
您可以将"日期"排序量化为10分钟的块,那么如何按楼层排序(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:
地板(UNIX_TIMESTAMP( '2009-03-16 09:09:00')/ 600)= 2061990
地板(UNIX_TIMESTAMP( '2009-03-16 09:11:00')/ 600)= 2061991
假设你在09:11比09:09有一个更高优先级的行 - 它仍会出现在 09:09行之后,因为它落入了下一个10分钟的块,即使它只有2分钟不同.
所以这种方法是近似的,但并没有像最初所说的那样解决问题.
你说出问题的方式,一个高优先级的行可能会出现在之前记录的几个小时(或几天或几个月!)之前,只要有一系列不间断的低优先级行,间隔小于10分钟.