获取指定列值的最高主键

时间:2015-06-12 18:51:05

标签: 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'; 

以下是表格中的当前数据:

screenshot1

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

screenshot2

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

Screenshot3

5 个答案:

答案 0 :(得分:4)

试试这个:

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

答案 1 :(得分:2)

你的两个WHERE条件是取消id 40的资格.Max(id)的子SELECT每次都返回42。您的请求代码条件要求requestcode =" FOREMAN"。没有" FOREMAN" ID为42的请求代码。

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

你也可以试试[QTRAX4619410]。[QTRAXAdmin]。[qt_request] doeos不包含请求代码:

<!DOCTYPE html>
   <html ng-app="empApp">
       <head>
<meta charset="utf-8" />
<title></title>
<script src="lib/angular/angular.js"></script>
<script src="lib/angular-resource/angular-resource.js"></script>
<script src="lib/angular-route/angular-route.js"></script>
<script src="app.js"></script>
       </head>
           <body>
               <h1>Hello Angular JS</h1>

What is 2+2 ?
<br /><br />
Answer = {{2+2}}
<br /><br />
<ng-view></ng-view>
             </body>
     </html>

答案 4 :(得分:1)

我是这样写的:

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顺序枚举行,然后选择第一个(即最大的)。优化器可以很好地优化,但是你不会错误地思考它。