2017-08-23 1 views
1

JOBNUMという名前の列を持つ表があります。この列は、数値がABC-101A, ABC-102F, XYZ-254D, etc.のような英数字列です。値は順番に割り当てられます。これは最新のものを取得します。これは、カラムのMAX - 1を得るための最良の方法ですか?

SELECT MAX(JOBNUM) FROM WEEKLY.dbo.Jobs_all 

私は以前JOBNUMではなく、最新のものを取得する方法が必要でした。これはうまくいくようです...誰かが良いアイデアを持っていない限り...?

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

'JOBNUM FROM WEEKLY.dbo.Jobs_all ORDER BY JOBNUM DESC OFFSET 1 ROW FETCH NEXT 1 ROW'の作業はありますか?私はSQL Serverを本当に知っているわけではありませんが、[いくつかのドキュメント](https://technet.microsoft.com/en-us/library/gg699618(v = sql.110)。 – Ryan

+0

@ryanそれは彼らがAzureまたは2016 Iバージョンであると考えています。 – xQbert

+2

オフセットのフェッチは> = 2012より大きいバージョンから利用でき、これもうまく動作します – TheGameiswar

答えて

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 
+0

ただ同じことを投稿しようとしています:) –

+0

私は十字架でそれを行う方法を理解しようとしていました。良い/最善のアプローチ – xQbert

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を使用するよりも(高速)より効率的です。

+0

より良い(より速い)パフォーマンスや精度の方が効率的ですか? @Simon Faster。 – Simon

+1

しかし、「MAX」選択が1つの結果を返すので、非常に少しだけ速くなります。 –

+0

のヒントをありがとう。 LIMITをSQL Serverで使用できるとは思わない –

0

は、ここでは、これがどのように役立つか

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

の希望です!

関連する問題