这是获得MAX - 1列的最佳方法吗?

时间:2017-08-23 16:44:12

标签: sql-server

我们有一个名为JOBNUM的列的表,这是一个字母数字列,其值为ABC-101A, ABC-102F, XYZ-254D, etc.这些值是按顺序分配的。这得到了最新的一个:

SELECT MAX(JOBNUM) FROM WEEKLY.dbo.Jobs_all

我需要一种方法来获得之前的JOBNUM,而不是最新的JOBNUM。这似乎有效...除非有人有更好的想法......?

SELECT MAX(JOBNUM) FROM WEEKLY.dbo.Jobs_All 
WHERE JOBNUM NOT IN (SELECT MAX(JOBNUM) FROM WEEKLY.dbo.Jobs_all)

3 个答案:

答案 0 :(得分:4)

这是一个非常好的方向。

2种更有效的方式:

SELECT (JOBNUM) FROM WEEKLY.dbo.Jobs_All ORDER BY JOBNUM DESC LIMIT 1 OFFSET 1

或者:

SELECT MAX(JOBNUM) FROM WEEKLY.dbo.Jobs_All 
WHERE JOBNUM < (SELECT MAX(JOBNUM) FROM WEEKLY.dbo.Jobs_all)

使用<比使用NOT IN更有效(更快)。

答案 1 :(得分:1)

使用CTE和row_number()窗口函数可以提高灵活性。

WITH CTE AS (
SELECT row_number() over (order by jobNum desc) , jobNum
FROM WEEKLY.dbo.Jobs_All)
SELECT * 
FROM CTE 
WHERE RN = 2 

答案 2 :(得分:0)

这里是如何

SELECT MAX(JOBNUM) FROM WEEKLY.dbo.Jobs_All WHERE JOBNUM < (SELECT MAX(JOBNUM) FROM WEEKLY.dbo.Jobs_all)

希望这有帮助!