我有一个包含这样的事件的表
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-03-11,那么带有id 1的行应首先出现,然后其余的行是desc命令
这是我到目前为止所尝试的
SELECT *
FROM events
ORDER BY (date > CURDATE() and status = 1) asc,
date desc
答案 0 :(得分:0)
您可以在order by
中使用多个键:
order by (date >= curdate() and status = 1) desc,
date desc
答案 1 :(得分:0)
我相信你的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