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

如何选择所有PK(第1列),其中第3列中的最大值(ISNULL(值,0))由第2列中的值分组?

东方华晖
2023-03-14

我找不到关于我的问题的答案,因为所有类似于这个问题的问题都没有在最大值中使用可为null的int并从中获得1列。

我的表格如下:

| ContractId | ContractNumber | ContractVersion |    
+------------+----------------+-----------------+    
|          1 |             11 |            NULL |  
|          2 |             11 |               1 |  
|          3 |             11 |               2 |  
|          4 |             11 |               3 | --get this one 
|          5 |             24 |            NULL |  
|          6 |             24 |               1 | --get this one 
|          7 |             75 |            NULL | --get this one 

第一个版本是NULL,以下所有版本都得到一个以1开头的数字。

所以现在我只想获取最新合约的行(如行后面的注释所示)。

因此,对于每个合同号,我想从最新的合同版本中选择合同号。

函数不能工作,因为它是一个可为null的int。

所以我想将ISNULL(SigntVersion,0)MAX()函数结合使用,但我不知道如何使用。

我尝试了以下代码

SELECT 
    ContractNumber,
    MAX(ISNULL(ContractVersion, 0))
FROM
    Contracts
GROUP BY 
    ContractNumber 

...它返回了所有最新版本号,并结合了契约号,但我需要契约号。当我在“选择”和“分组依据”中添加“压缩”时,我将再次获得所有版本。

结果应该是:

| ContractId |
+------------+
|          4 |
|          6 |
|          7 |

共有2个答案

长孙嘉容
2023-03-14

这将起作用:

select ContractId,max(rank),ContractNumber from(select *,rank() over(partition by 
ContractVersion order by nvl(ContractVersion,0)) desc ) rank from tablename)  group by 
ContractId,max(rank),ContractNumber;
孟建木
2023-03-14

当您想要基于最小/最大值选择行时,这只是一个简单的应用程序

declare @t table (ContractId int, ContractNumber int, ContractVersion int)
insert into @t(ContractId,ContractNumber,ContractVersion) values
(1,11,NULL ),
(2,11,   1 ),
(3,11,   2 ),
(4,11,   3 ),
(5,24,NULL ),
(6,24,   1 ),
(7,75,NULL )

;With Numbered as (
    select *,ROW_NUMBER() OVER (
             PARTITION BY ContractNumber
             order by ContractVersion desc) rn
    from @t
)
select
    *
from
    Numbered
where rn = 1
 类似资料:
  • 我刚开始学习SQL。我正在使用Oracle数据库。 表emp中包含empno、ename、job、mgr、hiredate、sal、comm、deptno列。 我想从ename列中获取每个deptno的第一条记录,ename必须按asc排序。 以下SQL工作: 我想优化它,所以我不需要重写它,如果我添加一些记录到deptno列。 我用distinct-like进行了尝试

  • 问题内容: 尝试解码JSON 时出现错误。 我用于API调用的URL在浏览器中可以正常工作,但是通过curl请求完成时会出现此错误。以下是我用于curl请求的代码。 错误发生在 完整回溯: 追溯: 问题答案: 总结评论中的对话: 不需要使用库,Python作为模块包含了相同的库。 无需解码从UTF8到unicode的响应,/ 方法可以本地处理UTF8编码的数据。 有一个非常古老的API。除非您有特

  • 问题内容: 我有一个这样的清单: 如果仅使用该方法,它将返回答案,如果我试图找到max name ,那将是正确的,但是我试图返回其整数最大的元素。 问题答案: 之所以起作用,是因为 max 函数的 key 参数指定了一个函数,当 max 想要知道用于搜索最大元素的值时,该函数将被调用。 max 将为序列中的每个元素调用该函数。并创建一个接收列表并返回第一个(从零开始计数)元素的小函数。所以 __

  • 我有一个数据框 我希望Col1中的唯一值与最新日期Col2一致。所需的列如下所示

  • 我使用请求来获取和解析使用Scrapy with Scrapyrt(实时刮取)刮取的一些数据。 我是这样做的: 根据Scrapy文档,当参数设置为时,爬行器会自动请求URL并将响应传递给解析方法,解析方法是解析请求时使用的默认方法。 start_requests 类型:布尔型 可选的 spider是否应执行Scrapy.spider.start\u请求方法。在没有ScrapyRT的情况下正常运行S

  • 问题内容: 好的,因此我对其他解决方案没有任何帮助。所以这就是我想要做的。我需要选择多列的行,其中一列的值是最大值。 这是样本数据 我需要选择整行,其中orderfileid是每个唯一商品编号的最大值 返回的数据集应该看起来像 我想我尝试过可以想到的select max(orderfileid)的每种组合 任何帮助都将被申请。谢谢 问题答案: 您需要在子查询中找到MAX值,然后使用这些结果将其连接