Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取指定列值的最高主键_Sql_Sql Server - Fatal编程技术网

Sql 获取指定列值的最高主键

Sql 获取指定列值的最高主键,sql,sql-server,Sql,Sql Server,我有一个查询,应该为特定请求代码提取最高的主键id: SELECT id FROM [QTRA410].[Admin].[qt_request] WHERE id IN (SELECT Max(id) FROM [QTRAX4619410].[QTRAXAdmin].[qt_request]) AND requestcode = 'FOREMAN'; 以下是表中的当前数据: 但是,查询根本没有返回任何内容,我不明白为什么: 奇怪

我有一个查询,应该为特定请求代码提取最高的主键id:

SELECT id 
FROM   [QTRA410].[Admin].[qt_request] 
WHERE  id IN (SELECT Max(id) 
              FROM   [QTRAX4619410].[QTRAXAdmin].[qt_request]) 
       AND requestcode = 'FOREMAN'; 
以下是表中的当前数据:

但是,查询根本没有返回任何内容,我不明白为什么:

奇怪的是,当我搜索请求代码“JOB”时,它工作正常:

试试这个:

SELECT id 
FROM   [QTRA410].[Admin].[qt_request] 
WHERE  id IN (SELECT Max(id) 
              FROM   [QTRAX4619410].[QTRAXAdmin].[qt_request]
              WHERE requestcode = 'FOREMAN')

你的两个条件是取消资格id 40。对于Max(id)的子选择每次返回42。您的requestcode条件要求requestcode=“FOREMAN”。没有id为42的“FOREMAN”请求代码。

您的子选择未被请求代码过滤。我想你想要像这样的东西

SELECT id 
FROM   [QTRA410].[Admin].[qt_request] 
WHERE  id IN (SELECT Max(id) 
              FROM   [QTRAX4619410].[QTRAXAdmin].[qt_request]
              AND requestcode = 'FOREMAN') 
       ; 


如果[QTRAX4619410].[QTRAXAdmin].[qt_请求]操作系统不包含请求代码,也可以尝试:

SELECT id 
FROM   [QTRA410].[Admin].[qt_request] 
WHERE  id IN (SELECT Max(r1.id) 
              FROM   [QTRAX4619410].[QTRAXAdmin].[qt_request] r1
              join [QTRA410].[Admin].[qt_request]  r2 on r1.id = r2.id
       AND r2.requestcode = 'FOREMAN')
我会这样写:

with cte as (
  SELECT id
     , row_number() over (partition by reqeustcode order by id desc) as rn
  FROM   [QTRAX4619410].[QTRAXAdmin].[qt_request]
)
select *
from cte
where rn = 1
   and requestcode = 'FOREMAN'

本质上,您是按每个请求代码的id降序枚举行,然后选择第一个(即最大的)。优化器可以很好地优化它,但你这样想不会错。

为什么它“奇怪”?,
id=42
有一个
RequestCode='JOB'
,从上面的表数据可以看出,FOREMAN应该返回40,但它什么也不返回。然而,正如预期的那样,工作返回42。也许“FOREMAN”实际上是“FOREMAN”(见空格)。请检查[RequestCode]列中的实际值。@davidtunell这是因为您在子查询之外使用了
RequestCode='FOREMAN'
,您应该在子查询内部使用它。最初的逻辑是,max id必须是FOrman的请求代码,而不是与max id关联的请求代码。这实际上更有用。
with cte as (
  SELECT id
     , row_number() over (partition by reqeustcode order by id desc) as rn
  FROM   [QTRAX4619410].[QTRAXAdmin].[qt_request]
)
select *
from cte
where rn = 1
   and requestcode = 'FOREMAN'