2014-10-20 161 views
0

以下是通過Business Objects包執行的T-SQL。我的問題是,是否有完成下列聚集的查詢較短方式:SQL彙總

(SELECT tblName.Details 
FROM tblName 
WHERE tblName.ID = (SELECT Max(tblName2.ID) 
         FROM tblName tblName2 
         WHERE tblMainQuery.id = tblName2.id 
          AND tblName2.StartDate = (SELECT Max(tblName3.StartDate) 
                 FROM tblName tblName3 
                 WHERE tblMainQuery.id = tblName3.id))) 

tblMainQuery.id是一個場,這使得它的相關子查詢。所以總而言之,我想將這個整個查詢作爲一個子查詢來實現,其中我想檢索最近開始日期的id,但是由於最近的開始日期可能會返回多個記錄,下降到主鍵級別並檢索最高主鍵。

我知道使用CTE會有所幫助,但這是不可能的,因爲它必須通過Business Objects Web Intelligence執行 - 這不受支持。

回答

1

我可能會嘗試ROW_NUMBER。按startDate排序以獲取最大startDate,再按ID排序以獲取屬於max StartDate的最大ID。然後,選擇只記錄與ROW_NUMBER = 1

+1

這種方法使用更少的代碼,並且只有一個子查詢,所以在我所要求而言是正確的。不知道對執行時間有什麼影響,因爲它們似乎是相同的,但代碼少的幾乎總是一件好事,所以謝謝。 – cope 2014-10-21 09:12:32

0

試試這個

SELECT * 
FROM tblName A 
     JOIN (SELECT TOP 1 Row_number() 
          OVER (
           ORDER BY startdate, id) row_n, 
          * 
      FROM tblName 
      ORDER BY row_n DESC) B 
     ON A.id = b.id 
+0

不幸的是,無法實現cte方法,請參閱推理問題的最後一段。 – cope 2014-10-20 16:15:13

+0

@cope - 現在檢查 – 2014-10-20 16:17:34