MySQL按第一列排序,按第二列排序

时间:2016-03-31 09:03:55

标签: mysql sql sorting datetime sql-order-by

我试图为我的MySQL查询获取正确的ORDER BY,但我无法通过正确的方式获取订单。

我有两列:

  1. breaking_news =值为NULL1
  2. news_published_dt =值为DATETIME
  3. 如何排序以便第一个输出breaking_news NOT NULLDATETIME排序,之后的其余内容仅按DATETIME排序?

    我试过这个,但它没有给我输出

    ORDER BY CASE WHEN n.breaking_news IS NOT NULL THEN 1 ELSE 2 END, n.news_published_dt DESC
    

5 个答案:

答案 0 :(得分:2)

看起来,你正在寻找:

from jenkinsapi.jenkins import Jenkins

J = Jenkins('http://localhost:8080')

params = {'VERSION': '1.2.3', 'PYTHON_VER': '2.7'}

J.build_job('foo', params)

答案 1 :(得分:0)

SELECT * FROM table_name ORDER BY news_published_dt DESC

答案 2 :(得分:0)

select * from 
(select *, 1 Shortby from table 1 where (breaking_news is null)
union all
select *, 2 Shortby from table 1 where (breaking_news=1)
) a
order by Shortby ,news_published_dt Desc

答案 3 :(得分:0)

MySQL中的SORT BY与您(包括我)所期望的工作方式不同。您不能对两列进行排序,而让第一列按第二列进行排序。

不起作用:

ORDER BY breaking_news, news_published_dt

结果:

breaking_news | news_published_dt
            1 | 2019-04-17
            1 | 2019-04-04
         null | 2019-05-01
         null | 2019-05-06
  • 请注意,null的排序正确,但是其中breaking_news为1;结果未根据发布者的需求进行排序。

我发现完成此任务的唯一方法;分别查询所需的布尔结果,然后将两者结合在一起。

这可行:

(SELECT * FROM news_table WHERE breaking_news = 1 ORDER BY news_published_dt)
UNION
(SELECT * FROM news_table WHERE breaking_news <> 1 ORDER BY news_published_dt)

结果:

breaking_news | news_published_dt
            1 | 2019-04-04
            1 | 2019-04-17
         null | 2019-05-01
         null | 2019-05-06

要对此进行更全面的解释,请查看Edwin Wang's explanation

答案 4 :(得分:-1)

使用此 按顺序排序n.breaking_news不是空的n.breaking_news ELSE&#39; zzzzzzzzzzzzzzzzzzzzzz&#39; END,n.news_published_dt DESC