mysql 时间排序问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 时间排序问题相关的知识,希望对你有一定的参考价值。
有一个表如下:
name time
xx 今天1:00
xx 2:00
xx 3:00
每小时1条数据.....
.....
....
....
xx 24:00
共24条数据
(时间是时间戳,为方便,在此写成时间)
想做如下排序:比如现在16:00 要从现在开始排排成如下:
16:00,17:00,18:00,19,20,21,22,23,24 ,15,14,13,12,11,10,9,8,......1
请问怎么写查询语句
select * from (
select
tablename_tmp.*,
@rownum:=@rownum+1 ,
if(time >=DATE_FORMAT(now(),'%Y-%m-%d %H:00') ,@rank:=@rank+1,@rank:=0) as rank
from (
select * from tablename order by time desc
)
tablename_tmp ,
(select @rownum :=0 , @ptime := null ,@rank:=0) a
) a
order by rank desc ,time desc
---------------------------------------方法2
select * from tablename order by
(case when DATE_FORMAT(time ,'%k')=0 then 24 when DATE_FORMAT(time ,'%k')*1>=DATE_FORMAT(now(),'%k')*1 then DATE_FORMAT(time ,'%k') else 25 end) ,time desc
题主测试一下?你这里的24点应该是第二天的00:00:00 。你这样排有什么用处?
追问就想知道用什么方法排,或者这么说吧。1-10 10个数,比5大或等于5的正序排列,比5小的倒序排列,产生这样一个结果 5 6 7 8 9 10 4 3 2 1
追答那你就要多加一列做为区分这两类数据(大于或等于5的集合和小于5的集合)的标志,排在前或后都有讲究的。
比如生成这样的:
number 多加的
1 4
2 3
3 2
4 1
5 0
6 0
7 0
8 0
9 0
10 0
select * from tablename order by 多加的 , number
还嫌麻烦就做并集:
select * from tablename where number>=5 order by number
union all
select * from tablename where number<5 order by number desc
时间不是递减的,是按照从现在的时间开始递增,增到12点再从现在的时间递减
以上是关于mysql 时间排序问题的主要内容,如果未能解决你的问题,请参考以下文章