2017-04-25 67 views
0

我們有一個場景,如下所述,需要最佳邏輯輸入。 數據庫是sql server 2012.需要幫助調整Sql表最大日期邏輯

我有一個表abc列'a','b','c'和日期字段'd'。 if table abc has 10 records with different dates,which is the best optimized way to have column'a','b','c'以及'd' 其中'd'只是整個記錄的最大日期組。

例如如果下面是表abc數據,

a b c d 
a1 b1 c1 01-02-2017 
a2 b2 c2 02-02-2017 
a3 b3 c3 10-02-2017 
a4 b4 c4 04-02-2017 

what we need is, 

a b c d 
a1 b1 c1 10-02-2017 
a2 b2 c2 10-02-2017 
a3 b3 c3 10-02-2017 
a4 b4 c4 10-02-2017 

這裏我們需要複製所有記錄的最大日期。

我們到目前爲止嘗試過的東西。

選項1 Select a , b, c, (Select max(d) from abc) d from abc

選項2

Select a , b, c, max.max_D from abc 
      join (Select max(d) max_D from abc) max on 1=1 

注意:這僅僅是例如我們的實際需求是相同的,但我們有超過10個連接和表中的數據是巨大的。

請建議。

+0

我認爲這是很難給你一個解決方案,如果你不知道你給出的數據.. –

回答

0

你使用的是2012這兩種解決方案訪問表twice..Since,我會建議使用Windows函數來處理這個

Select a , b, c, 
max(d)over (order by d desc) as maxx 
from abc 

對於此查詢到最佳性能,則需要以下指數

create index nci on table(d) 
include(a,b,c) 
+0

@TheGameiswarCan請你解釋一下覆蓋索引將如何執行的 – 2017-04-25 09:35:51

+0

對於這個窗口的功能,索引應該是形式,'POC',這意味着分區和按列排序應該是關鍵列,並且應該包括其餘的信息 – TheGameiswar

+0

@TheGameiswar感謝信息 – 2017-04-25 13:57:38

0
declare @MaxDate datetime 

Select @MaxDate=max(d) from table1 

select a,b,c @MaxDate d from table1 
+0

儘管此代碼片段是受歡迎的,並且可以提供一些幫助,如果它包含* how * it解決問題的解釋](// meta.stackexchange.com/q/114762)會大大改進。沒有這些,你的答案就沒有什麼教育價值了 - 記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –