繁体   English   中英

SQL棘手的顺序

[英]SQL tricky order by

我正在尝试订购退货套装,但我很难让它正确订购。

我正在选择字段,每个字段都有date_updateddate_added 添加字段时, date_updated为null,直到有更新,然后分配当前日期。

我需要通过将最新的条目放在BOTTOM上来排序我的列表,并将最旧的条目放在顶部。 所以如果添加一个项目,它应该直接到底部。 有没有办法将所有日期字段连接在一起,然后按最旧到最新排序,忽略更新或添加?

这可能听起来有些令人困惑,但我已经尝试了ORDER BY date_added DESC, date_updated ASC以及类似的东西的多种组合,但它没有做我需要做的事情。 我得到了date_added排序的顶部部分,然后在那之下是date_updated的单独排序......

任何输入在这里都会非常有用......

尝试

order by coalesce(date_updated, date_added)

COALESCE DOC

您可以尝试CASE语句

SELECT 
    firstname, 
    lastname, 
    date_added, 
    date_updated, 
    CASE date_updated IS NULL 
        THEN date_added 
        ELSE date_updated 
    END CASE AS order_date  
FROM mytable 
ORDER BY order_date DESC

这样做是检查date_updated是否为null,然后将date_added的值放入新列。 如果没有,则将date_updated置于其中。 新列称为order_date ,用于排序。

您还可以在ORDER BY子句中添加CASE语句,但这可能会降低查询速度,因为它必须在索引与构造数据时进行连接。 虽然没有定论,但如果在SELECT与ORDER BY中使用CASE,我发现性能略有提升。

Order By使用CASE

ORDER BY CASE WHEN date_updated IS NULL
              THEN 0 
              ELSE 1
          END DESC, date_added DESC
Order by IsNull(DateUpdated,DateAdded)

会是一种方式

暂无
暂无

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

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