ORDER BY可能缺少列

时间:2019-01-28 13:27:24

标签: sql

我有这个带有2个字段的数据库,updateDate和createDate,这很容易解释。

现在,我的问题是updateDate有时可能不存在,而只是createDate。 我想按最新日期订购,但似乎找不到正确订购的方法,我的第一种方法是执行以下操作:

ORDER BY
CASE 
WHEN "updateDate" = '' THEN "createDate"
ELSE "updateDate"
END
DESC

这部分起作用,它赋予updateDate优先级,然后按createDate排序。 但是,会出现这样的问题,即它优先考虑先按updateDate排序,然后再按createDate排序(并非完全错误,updateDate在同一日期的优先级应高于createDate),因此,如果存在一个createDate,且updateDate没有比updateDate更新的新日期,将会这样放置在底部:

Item | updateDate | createDate
1       24/1/2019     1/1/2005
2       23/1/2019     1/1/2005
3       22/1/2019     1/1/2005
4                    23/1/2019
5                    22/1/2019

我应该怎么做,这样排序?

Item | updateDate | createDate
1       24/1/2019     1/1/2005
2       23/1/2019     1/1/2005
4                    23/1/2019
3       22/1/2019     1/1/2005
5                    22/1/2019

谢谢

编辑:SQL引擎是SAP HANA,这是未公开的文档,但是从我的测试来看,像MySQL这样的常规SQL应该可以工作。

4 个答案:

答案 0 :(得分:4)

如果您想在缺少createDate时退回到updateDate,则coalesce()可能会起作用:

SELECT * FROM TABLE ORDER BY coalesce("updateDate", "createDate");

答案 1 :(得分:1)

您可以使用IFNULL来订购

select * 
from my_table  
order by  ifnull(updateDate, createDate) DESC  

http://sap.optimieren.de/hana/hana/html/sql_function_ifnull.html

答案 2 :(得分:0)

尝试使用

SELECT FIRST_VALUE(updateDate) 
    OVER (PARTITION BY Item ORDER BY updateDate DESC) as [last_update]

答案 3 :(得分:0)

SELECT * FROM TABLE ORDER BY NVL(updateDate,CREATEDATE);

您也可以使用它