我有这个带有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应该可以工作。
答案 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);
您也可以使用它