1

他のフィールドに基づいて、別の順序を取る必要があるクエリがあります。CASEでステートメントを使用することは可能ORDER BYです。これまでのところ、正常に機能しています。唯一不可能と思われるのは、昇順/降順の部分を変更することです。

私のクエリ:

SELECT articleid, MIN(createtime) min,  MAX(createtime) max
FROM items 
GROUP BY articleid
ORDER BY
       CASE WHEN logic='foo' THEN min ELSE '0001-01-01 00:00:00' END ASC,
       CASE WHEN logic='bar' THEN max ELSE '0001-01-01 00:00:00' END DESC;

動作しますが、このようなフォームを作成できるかどうか疑問に思っていました (これが機能しないことはわかっています):

SELECT articleid, MIN(createtime) min,  MAX(createtime) max
FROM items 
GROUP BY articleid
ORDER BY
       CASE WHEN logic='foo' THEN min ASC ELSE max DESC END;
4

1 に答える 1

0

ASCandは、式のDESC最後にのみ使用できます。ただし、 at then を最後に置き、ELSE 句の最大値を否定することもできますASC(問題を複雑にする null がないことを前提としています)。

ORDER BY
    CASE WHEN logic='foo' THEN min ELSE -max END ASC;
于 2013-09-17T13:16:41.857 に答える