我们有一个名为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)
答案 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)
希望这有帮助!