当前位置: 首页 > 知识库问答 >
问题:

如何在最小值或最大值中包含空值?

年业
2023-03-14

我有一个存储时间跨度数据的表。该表的架构类似于:

ID INT NOT NULL IDENTITY(1,1)   
RecordID INT NOT NULL  
StartDate DATE NOT NULL  
EndDate DATE NULL  

我试图计算出每个记录id的开始和结束日期,即最小开始日期和最大结束日期。StartDate不可为null,所以我不需要担心这个问题,但我需要MAX(EndDate)来表示这是当前正在运行的时间跨度。

重要的是,我要保持EndDate的NULL值,并将其视为最大值。

最简单的尝试(如下)无法突出MIN和MAX将忽略NULLS的问题(来源:http://technet.microsoft.com/en-us/library/ms179916.aspx)。

SELECT recordid, MIN(startdate), MAX(enddate) FROM tmp GROUP BY recordid

我已经创建了一个SQL小提琴与基本设置完成。

http://sqlfiddle.com/#!3/b0a75

如何使SQL Server 2008服从我的意愿,从SQLFIDLE中给出的数据生成以下结果?

RecordId  Start       End  
1         2009-06-19  NULL
2         2012-05-06  NULL
3         2013-01-25  NULL
4         2004-05-06  2009-12-01

共有3个答案

越伯寅
2023-03-14

在我的表达式中,count(enddate)计算enddate列不为null的行数。表达式计算总行数。通过比较,您可以很容易地判断“结束日期”列中的任何值是否包含空值。如果它们相同,则结果为最大(结束日期)。否则,大小写将默认返回null,这也是答案。这是一种非常流行的精确检查方法。

SELECT recordid, 
MIN(startdate), 
case when count(enddate) = count(*) then max(enddate) end
FROM tmp 
GROUP BY recordid
梁嘉祥
2023-03-14

您想要的效果是将空值视为可能的最大日期,然后在完成后再次将其替换为空值:

SELECT RecordId, MIN(StartDate), NULLIF(MAX(COALESCE(EndDate,'9999-12-31')),'9999-12-31') 
  FROM tmp GROUP BY RecordId

根据您的小提琴,这将返回您在所有条件下指定的准确结果。

锺离良哲
2023-03-14

这有点难看,但因为NULL对您有特殊的意义,这是我能想到的最干净的方法:

SELECT recordid, MIN(startdate),
   CASE WHEN MAX(CASE WHEN enddate IS NULL THEN 1 ELSE 0 END) = 0
        THEN MAX(enddate)
   END
FROM tmp GROUP BY recordid

也就是说,如果任何一行有一个NULL,我们想强制它成为答案。只有当没有行包含NULL时,我们才应该返回最小值(或最大值)。

 类似资料:
  • 问题内容: 两个或多个值中的最小值或最大值是可能的。我需要这样的东西: 我可以仅使用MySQL来实现吗? 问题答案: 您可以使用和功能来实现它。 两者都在这里描述了http://dev.mysql.com/doc/refman/5.0/en/comparison- operators.html

  • 问题内容: 是否可以做这样的事情 要么 在CSS中? 问题答案: ,和终于可以! 从Firefox 75,Chrome 79和Safari 11.1(除外)开始。 并接受任意数量的参数。 具有语法,等效于。 并且可以嵌套。它们既可以在内部使用,也可以在外部使用,它们还可以包含数学表达式,这意味着您可以避免使用它们。 因此,原始示例可以写成:

  • 我有一个包含一些价格值的数据帧。不,我想有一个或最好的情况下有两个数据框,每篇文章的最大值和最小值没有 0 个值。 我用DT这样做(对于maxValue,一切都很完美): 但minValue Df显示0值。我也尝试过: 但是在这里我不知道如何使用 在最好的情况下,我希望每个产品的最大值和最小值都有dfs。

  • 生成包含位数的最低和最高整数值的最佳方法是什么? 例如: =1:Min=0,Max=9 我觉得这应该是一件非常容易完成的事情,但是我正在努力理解它背后的数学。 以下是迄今为止我得到的生成最大值的方法(基于此答案): 如果有人能帮助生成最小值,或者对上面的代码提出改进建议,我将不胜感激。 编辑 我就快到了——这似乎适用于所有情况,除非=1(最小值预期为0)

  • 问题内容: 我有一个像这样的数组: 我需要提取最小和最大的权重值。在这个例子中 $ min_value = 175 $ max_value = 200 有什么帮助吗?谢谢 ! 问题答案: 选项1. 首先,您映射该数组以获取这些数字(而不是全部详细信息): 然后得到最小和最大: 选项2。 (仅当您没有PHP 5.5或更高版本时)与选项1相同,但要选择值,请使用: 选项3。 选项4。 如果您只需要一个

  • 问题内容: 我的代码没有给出错误,但是没有显示最小值和最大值。代码是: 我是否需要system.out.println()来显示它,否则返回应该起作用吗? 问题答案: 您正在调用方法,但不使用返回的值。