doukong1391 2012-03-08 10:53
浏览 34
已采纳

复杂的MySQL SORT基于时间

I have to sort MySQL records based on a unix time field. However, some records hold a value of 1 instead of time. Here's how I want them sorted, assuming current time is 125:

127
130
132
133
1
1
1
1
124
122
119

As you can see, the top section is records in ASC order by the time field with the soonest time first, these are followed by all the records that are marked with 1 instead of a proper time, and then the records from the past in DESC order. Is this doable?

  • 写回答

2条回答 默认 最新

  • doulingzou1712 2012-03-08 11:35
    关注

    You can do this with the following code:

    drop table if exists numbers;
    create table numbers ( value int );
    insert into numbers values 
    (119),(122),(124),(127),(130),(131),(1),(1),(1),(1);
    
    select 
        value 
    from numbers
    order by if( value = 1, 125, if( value > 125, 99999 - value, value ) )  desc
    

    which produces:

    value
    -----
    127
    130
    131
    1
    1
    1
    1
    124
    122
    119
    

    Jus replace all occurrences of 125 with the current time and `99999' with the largest time value that you might encounter in your table.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度