多列的SQL MAX?

新手上路,请多包涵

如何在几列的最大值中每行返回 1 个值:

表名

[Number, Date1, Date2, Date3, Cost]

我需要返回这样的东西:

 [Number, Most_Recent_Date, Cost]

询问?

原文由 BenB 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 648
2 个回答

这是一个古老的答案,在很多方面都被打破了。

请参阅 https://stackoverflow.com/a/6871572/194653 ,它有更多的赞成票并与 sql server 2008+ 一起使用并处理空值等。

原始但有问题的答案

好吧,您可以使用 CASE 语句:

 SELECT
    CASE
        WHEN Date1 >= Date2 AND Date1 >= Date3 THEN Date1
        WHEN Date2 >= Date1 AND Date2 >= Date3 THEN Date2
        WHEN Date3 >= Date1 AND Date3 >= Date2 THEN Date3
        ELSE                                        Date1
    END AS MostRecentDate

原文由 Lasse V. Karlsen 发布,翻译遵循 CC BY-SA 4.0 许可协议

最后,针对以下内容:

  • SQL Server 2022 (16.x) 预览版
  • Azure SQL 数据库
  • Azure SQL 托管实例

我们也可以使用 GREATEST 。与其他 T-SQL 函数类似,这里有几个重要的注意事项:

  • 如果所有参数都具有相同的数据类型并且支持该类型进行比较,则 GREATEST 将返回该类型;
  • 否则,该函数将在比较之前将所有参数隐式转换为优先级最高的数据类型,并将该类型用作返回类型;
  • 如果一个或多个参数不为 NULL,则在比较过程中将忽略 NULL 参数;如果所有参数都为 NULL,则 GREATEST 将返回 NULL;

GREATEST 中不支持以下类型进行比较:varchar(max)、varbinary(max) 或 nvarchar(max) 超过 8,000 字节、光标、几何、地理、图像、非字节排序的用户定义类型、ntext、表、文本和 xml。

原文由 gotqn 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进