SQL 合并两个结果集 一个倒序,一个正序

要求状态正常的按end_time 升序排, 后面跟着 过期的 数据。按end_time 倒序排

select * from (SELECT * FROM table where status='正常' order by end_time asc) a union all

select * from (SELECT *  FROM table where status='到期' order by end_time desc)  b


必须外面包一层,直接两个结果集 union 发现正常的在上面,到期的在以下,可是各自内部是无序的。也就是说union的时候是没有order by做的union,

内部的order by没有生效。 包了一层应该是产生了暂时中间表。次序便固定了。


还有个办法是用  case when 对 正常的 时间乘以-1 变为负值, 最后order by time  asc便能够得到结果

posted on 2017-08-07 19:47  wgwyanfs  阅读(491)  评论(0编辑  收藏  举报

导航