SQL按两个不同(可能为空)列排序

SQL按两个不同(可能为空)列排序,sql,sql-order-by,Sql,Sql Order By,我有一个三列的表;第一列包含id,另外两列包含日期(其中最多一列为null,但我认为这不会影响任何内容)。我将如何根据哪个日期更大来订购ID?我试过了 ORDER BY CASE WHEN date1 > date2 THEN date1 ELSE date2 END 但这不起作用。有人能帮我吗?此外,我看到其他人发布的所有类似问题都有,因此查询根据第一列对结果进行排序,如果第一列为null,则根据第二列对结果进行排序。我是否必须首先定义每个空值?我通过一个完整的外部联接来创建这个表,所

我有一个三列的表;第一列包含id,另外两列包含日期(其中最多一列为null,但我认为这不会影响任何内容)。我将如何根据哪个日期更大来订购ID?我试过了

ORDER BY CASE
WHEN date1 > date2 THEN date1
ELSE date2
END
但这不起作用。有人能帮我吗?此外,我看到其他人发布的所有类似问题都有,因此查询根据第一列对结果进行排序,如果第一列为null,则根据第二列对结果进行排序。我是否必须首先定义每个空值?我通过一个完整的外部联接来创建这个表,所以这将是一个完全不同的问题,所以希望它可以用空值来完成。

试试

SELECT MAX(date1,date2) date FROM table ORDER BY date;

我相信您的问题与任一列为空时比较失败有关。因此,您可能需要:

 ORDER BY CASE
          WHEN date1 IS NULL THEN date2
          WHEN date2 IS NULL THEN date1
          WHEN date1 > date2 THEN date1
          ELSE                    date2
          END

您的
CASE
表达式在我看来很好,只是它不支持
date2
为空的情况;为了支持这一点,您需要在date1>date2或date2为空时,然后在date1 ELSE date2 END时,按大小写顺序。但你说它“不起作用”。你能说得更具体些吗?例如,您可以发布未正确排序的实际数据吗?Gabe,哪个数据库将运行查询?很抱歉,我认为它们都工作相同。但我用的是甲骨文。我不知道这对你们来说是否足够具体但问题似乎是空值做了不应该做的事情。我以为除了在聚合中,空值被忽略了,但似乎我读错了笔记SYeah,但是如果不在date1上以某种方式将表连接到自身,就无法在标准SQL中真正做到这一点!=空,然后在date2再次加入!=null,但给两个具有未定义行为的相同别名。(我删除了以前的注释,用更清晰的注释替换它们。)我认为任何DBMS都不支持使用
MAX
;也许你想的是最伟大的?但无论如何,这种方法真的没有必要;这些表达式可以在
ORDER BY
子句中很好地使用。它们可以,但将其别名为自己的列也可以检索日期。额外的,免费的功能。-1,对不起。你在为一个失败的查询提供荒谬的理由,这个查询没有做OP想要做的事情,并且做OP没有要求做的事情。如果你不知道如何做某事,你真的不需要只是编一个答案。你是对的,我的意思是最好的。然而,知道选择的日期可能是他的下一个问题。