3

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

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

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

这可能听起来有点令人困惑,但我已经尝试了很多组合ORDER BY date_added DESC, date_updated ASC,以及类似的东西,但它并没有做我需要它做的事情。我得到最上面的部分date_added,然后在下面是一个单独的订购date_updated...

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

4

4 回答 4

4

尝试

order by coalesce(date_updated, date_added)

合并文档

于 2012-09-21T16:57:47.613 回答
1

你可以试试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为空,然后将 的值放入新列date_added。如果没有,它会将date_updated. 新列被调用order_date并用于排序。

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

于 2012-09-21T17:00:55.480 回答
0

CASEOrder By子句中使用。

ORDER BY CASE WHEN date_updated IS NULL
              THEN 0 
              ELSE 1
          END DESC, date_added DESC
于 2012-09-21T16:57:47.650 回答
0
Order by IsNull(DateUpdated,DateAdded)

将是一种方式

于 2012-09-21T16:58:19.443 回答