2013-06-26 37 views
0

我正在編寫SQL Server查詢,並需要解決方案以篩選正確返回的行。T-SQL - 基於日期的篩選記錄

基本設置如下 - 我從主要基於標識符的表中選擇一堆記錄。因此,對於給定的標識符,可能會有100個記錄最初返回。然而,在這100個記錄中,有一些需要刪除 - 不是因爲它們是重複的,而是因爲一個比另一個更新。所以我基本上只需要一種方法來根據最近創建/修改的記錄進一步過濾結果。

我知道理想情況下,這些「舊」記錄不應該在數據庫中,但我無法控制。所發生的事情本質上是人們隨着時間的推移更新條目以反映新的信息,而不是編輯「舊」條目,每次都輸入一個新條目。因此,給定標識符可能有3個條目,但我只需要最近輸入的條目。

在T-SQL查詢字符串中執行此操作有一個簡單的方法嗎?它將與Access查詢中的「Last of」功能類似。我的每條記錄都有格式正確的日期列。

謝謝!

我的查詢字符串到目前爲止(原諒VB語法):

"SELECT *" & _ 
    "FROM Performance_Override " & _ 
    "WHERE ([Deal_Name] = " & "'" & Range("ID").value & "'" & " or" & _ 
    " [UNIQUE_ID] LIKE " & "'" & "%SPLIT_LOAN%" & "')" & " AND" & _ 
    " ([Scenario] = " & "'" & "BASE" & "')" & _ 
    "ORDER BY [Date] ASC; " 
+0

你的意思是這樣嗎? http://stackoverflow.com/questions/1313120/retrieving-the-last-record-in-each-group –

+0

你可以選擇與該ID的DateTime列的最大值,然後做一個語句刪除任何少於這個日期與相同的ID。 –

+0

如果您向我們展示您迄今爲止可以提供幫助的查詢。 – offthat

回答

0

選擇是

select ID, max(datefield) 
from table 
group by ID 

你只需要選擇或你想真正刪除舊的條目?

WITH TableTop AS 
(
    SELECT ID, User, OrderDate 
    ROW_NUMBER() OVER (ID BY OrderDate DESC) AS RowNumber 
    FROM Table 
) 
SELECT ID, User, OrderDate 
FROM TableTop 
WHERE RowNumber = 1; 
+0

很簡單!只是最大的功能吧?我只需要擔心選擇,數據庫將保留舊的條目。還有一個問題,如果你不介意 - 我在數據庫中有大約70個字段,我現在必須全部輸入而不是使用「SELECT *」嗎? – brentf

+0

不幸的是*不會工作。但在SSMS中,只需右鍵單擊表格即可創建選擇。 – Paparazzi

+0

很酷。非常感謝! – brentf