繁体   English   中英

通过多列多条件排序

[英]Order by multiple columns with multiple conditions

我有一张桌子,上面有一些这样的事件

id----------title-----------date-------------status
1-----------birthday-------2018-03-12--------1
2-----------match----------2018-03-13--------2
3-----------anniversary----2018-03-10--------1
4-----------trip-----------2018-03-15--------1
5-----------birthday-------2018-03-17--------2
6-----------birthday-------2018-03-11--------1

预期结果

id----------title-----------date-------------status
1-----------birthday-------2018-03-12--------1
4-----------trip-----------2018-03-15--------1
5-----------birthday-------2018-03-17--------2
2-----------match----------2018-03-13--------2
6-----------birthday-------2018-03-11--------1
3-----------anniversary----2018-03-10--------1

我需要像日期比今天大的前几行一样查询它,状态为1应该首先出现,然后其余的在desc中出现。

假设今天是2018年3月11日,则ID为1的行应首先出现,然后其余的行按desc顺序排列

到目前为止,这是我尝试过的

SELECT *
FROM events
ORDER BY (date > CURDATE() and status = 1) asc,
         date desc

您可以按以下order by使用多个键:

order by (date >= curdate() and status = 1) desc,
         date desc

我相信您的SQL应该是这样的,但是如果没有预期的结果很难说。

询问

SELECT 
 *
FROM 
 [table]
WHERE 
  date > CURDATE()
AND
  status = 1
ORDER BY 
  date ASC
LIMIT 1

UNION 

SELECT 
 *
FROM 
 [table]
WHERE 
   id NOT IN (
    SELECT 
      id
    FROM 
     [table]
    WHERE 
       date > CURDATE()
    AND
       status = 1
    LIMIT 1
   )
 AND
   date > CURDATE()
ORDER BY 
 date DESC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM