GRAILS:HQL-Order by with IF(ISNULL)

GRAILS:HQL-Order by with IF(ISNULL),grails,hql,gorm,Grails,Hql,Gorm,我想知道如何格式化这个查询。我有一个有三个日期的表,其中一些日期可以为空。这三个字段是createdDate、downDate和fixDate。我需要根据日期查询并获取最新条目。例如,如果fixDate不为null,则按fixDate下单,如果为null,则我需要按downDate下单。如果downDate为空,则我按createdDate订购 通过mySQL,我使用以下方法获得正确的结果: SELECT * FROM history WHERE equipment_id=88 ORDER BY

我想知道如何格式化这个查询。我有一个有三个日期的表,其中一些日期可以为空。这三个字段是createdDate、downDate和fixDate。我需要根据日期查询并获取最新条目。例如,如果fixDate不为null,则按fixDate下单,如果为null,则我需要按downDate下单。如果downDate为空,则我按createdDate订购

通过mySQL,我使用以下方法获得正确的结果:

SELECT * FROM history WHERE equipment_id=88 ORDER BY IF(ISNULL(fix_date), IF(ISNULL(down_date), created_date, down_date), fix_date) DESC;
我正试图将其应用到我的grails项目中,并使用HQL和Twired(还尝试了它的其他变体):

还尝试:

   History.executeQuery("SELECT FROM History WHERE equipment=:eqpt ORDER BY " +
    "IF(COALESCE(fixDate,downDate,createdDate) DESC", [eqpt:equipment])
我得到的错误是:

nexpected token: FROM near line 1, column 8 [SELECT FROM com...History WHERE equipment=:eqpt ORDER BY IF(COALESCE(fixDate, downDate, createdDate) DESC]

我感谢任何帮助,如果有createCriteria解决方案也可以。谢谢。

我从来没有尝试过,但是声明在“where”子句中支持coalesce()。如果在“select”子句中也有,那么您可以选择合并日期,然后按它排序,因为文档中还说明

“查询返回的列表可以按 返回的类或组件“

所以,也许是这样的:

 select h.prop1, h.prop2, coalesce(h.fixDate, h.downDate, h.createdDate) as orderDate from history h where ..... order by orderDate

也许有帮助。@Sergio,我刚试过,不幸的是仍然得到同样的错误结果。谢谢:(尝试
从历史记录中选择h
相同的错误。我想知道HQL是否支持if条件??Sergio谢谢你的帮助。我想你告诉了我正确的解决方案,但我在查询中仍然有if条件。再次感谢。是的,就是这样。我刚刚得到了提示。基本上我使用的是if(COALESCE当COALESCE已经在处理该条件时。让我感到不舒服的是我有IF(ISNULL),然后更改了它。
 select h.prop1, h.prop2, coalesce(h.fixDate, h.downDate, h.createdDate) as orderDate from history h where ..... order by orderDate