繁体   English   中英

合并两个select语句而不排序

[英]Merge two select statement without ordering

有一个表TableX(id,user_id,sticky_date,created_at)

很少有条目具有粘性日期。

我试图得到结果,

结果将包含所有具有 sticky_date 顺序 desc 的条目,然后所有剩余的条目按 created_at 排序。

我尝试了以下查询,

(SELECT * FROM TableX ORDER BY sticky_expiry_date)
UNION 
( select * from TableX order by created_at desc)

但是在 union created_at 没有按预期工作之后。 有什么办法可以在单个查询中做这些事情。

我们可以使用计算列来做到这一点:

SELECT *
FROM
(
    SELECT *, 0 AS position, UNIX_TIMESTAMP(sticky_expiry_date) AS odr
    FROM TableX
    UNION     -- UNION ALL ?
    SELECT *, 1, -UNIX_TIMESTAMP(created_at)
    FROM TableX
) t
ORDER BY
    position, odr;

这里的想法是position别名跟踪联合的哪一半应该首先出现。 然后, odr别名跟踪联合的每一半内的排序。 上半部分使用sticky_expiry_date作为odr别名,而后半部分使用created_at 为了处理升序/降序日期排序的问题,我们可以将日期列包装在UNIX_TIMESTAMP并按该数量(升序)或该数量否定(降序)排序。

暂无
暂无

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

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