2016-12-27 39 views
1

我注意到我們的產品代碼中的一些東西,它真的把我拋棄了。我們有一個數據表,其中包含有人與我們聯繫的一年。可以說它可以追溯到90年代末。SQL MAX集合VS.手動計算

我們有一個查詢計算上一年在同一個查詢中的其他未來計算中使用。它看起來像這樣:

@CurrYear = 2016 

select @PrevYear = max(Year) 
from x 
where x.Year < @CurrYear 

這似乎是一個很令人費解的方式......不知道爲什麼這個人沒有做:

@PrevYear = @CurrYear - 1 

我問這更多的查詢性能的角度來看。哪個更快?爲什麼要這麼多代碼來計算上一年?

+0

您可以快速找出哪一個更快運行。 – dfundako

+6

作者確實沒有使用「@PrevYear = @CurrYear - 1」,因爲作者認爲 - 正確或不正確 - 臨時t幾年可能會失蹤。 –

+1

該查詢正在拉動有數據*的上一年*。當然,你可以從當前年份中減去1,但是我認爲其意圖是將前一年的數據附加到它上面。沒有看到數據,這就是我所能說的。 '哪個更快?' - 減1'哪一個是正確的?' - 我不知道,取決於它被用於什麼。 – Siyual

回答

3

我相信他要麼沒想到另一種方式來做到這一點,或者他想@PrevYear來表示你接觸過的最後一年(可以說沒有從2015年的數據,那麼應該@PrevYear 2014年。

在性能方面,你的建議應該會更快,因爲它是對參數的計算。這是很難說是否會有任何的差異,取決於表,索引的大小等

+0

謝謝你,sagi。我上面寫了一條評論。在少數情況下,我們可能會錯過一年。我們的IT部門非常重視。 – Tyler