このクエリをどのようにフォーマットするのか疑問に思っています。3 つの日付を持つテーブルがあり、一部は null になる可能性があります。3 つのフィールドは、createdDate、downDate、および fixDate です。日付に応じて最新のエントリを照会して取得する必要があります。たとえば、fixDate が null でない場合は fixDate で注文し、null の場合は downDate で注文する必要があります。downDate が null の場合、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を使用して試しました(これの他のバリエーションも試しました):
History.executeQuery("SELECT FROM History WHERE equipment=:eqpt ORDER BY " +
"IF(ISNULL(fixDate), IF(ISNULL(downDate), createdDate, downDate), fixDate) DESC", [eqpt:equipment])
また試しました:
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 ソリューションもあれば、それで問題ありません。ありがとう。