簡體   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