2012-03-05 163 views
2

是否有一個選項可以獲得最高日期的行而無需加入同一個表並使用max(date)? Top1是否通過desc有效選項排序?SQL Server的最後日期

我使用SQL Server 2000.並且性能很重要。

編輯:

表1:

columns: part - partdesc 

表2:

columns: part - cost - date 


select a.part,partdesc,b.cost 
left join(select cost,part 
      right join(select max(date),part from table2 group by part) maxdate ON maxdate.date = bb.date 
      from table2 bb) b on b.part = a.part 
from table1 

我不知道,如果上述工程的代碼,但是這是我不喜歡的查詢。在我看來,效率低下。

+4

爲什麼你不能使用'MAX'日期? 'TOP 1 ORDER BY DATE DESC'將基本上是相同的操作,但可能效率較低,因爲它可能會排列整個表格而不是隻找到最高值。 – JNK 2012-03-05 14:01:41

+0

@JNK帶過濾器的表格將有最多10行。正常2行。從這些行我需要最後的日期。 – BBAA 2012-03-05 14:24:31

+0

如果你只有10行,那麼爲什麼性能還要考慮? – JNK 2012-03-05 14:28:16

回答

1

這是根據您的編輯進行的簡化查詢。

SELECT 
    a.part, 
    a.partdesc, 
    sub.cost 
FROM 
    Table1 A 
INNER JOIN 
    (SELECT 
     B.part, 
     cost 
    FROM 
     Table2 B 
    INNER JOIN 
     (SELECT 
      part, 
      MAX(Date) as MaxDate 
     FROM 
      Table2 
     GROUP BY 
      part) BB 
     ON bb.part = b.part 
     AND bb.maxdate = b.date) Sub 
    ON sub.part = a.part 

子子查詢將有望運行一點點比你目前的版本更快,因爲它會每部分價值,爲整個查詢運行一次,一次也沒有。

+0

K,我會與此一起去。謝謝你的幫助。 – BBAA 2012-03-05 15:09:58

1
SELECT TOP 1 columnlist 
FROM table 
ORDER BY datecol DESC 

無疑是一個有效的選擇,假設你的datacols足夠精確,你得到所需要的結果(換句話說,如果是每天一列,而您日期反映了這一點,那麼肯定的。如果是幾個每分鐘行數,可能不夠準確)。

性能取決於您的索引策略和硬件。