2012-06-14 27 views
1

我有以下表結構:獲取不同的名稱,地址,最大(日期),同時保留ID

ID | fname | lname | street | date 

我試圖抓住不同FNAME,LNAME,街道和max(日期),而且還保留匹配行的ID。所以可能會有多行匹配的fname,lname,street,但所有的ID都是不同的,看起來像是一件簡單的事情,但很明顯,它已經逃到了這一點。

我發現一些解決方案几乎適合這個,但不是很完美。如果這已被覆蓋,我很抱歉。

謝謝。

+0

你是什麼意思的 「保留」 的標識做?您是否希望ID在您的行中成爲逗號分隔的值列表? –

+4

簡單的方法來問這個問題 - 顯示樣本數據 - 顯示預期的結果。聽起來像你需要一個別名查詢,執行以下'...(SELECT RecordID,MAX(Date)AS TheMax FROM ... GROUP BY RecordID)t ON t.RecordID = yourTable.RecordID' – JonH

+0

你在問數據庫對不同的事物做...提供一組不同的記錄,但不包括身份證作爲區分標準的一部分。並且包含一件讓記錄獨一無二的東西。你必須選擇一個或另一個。 – bluevector

回答

1

嘗試以下操作:

;WITH CTE AS 
(
    SELECT *, ROW_NUMBER() OVER(PARTITION BY fname, lname, street ORDER BY [Date] DESC) RN 
    FROM yourTable 
) 
SELECT ID, fname, lname, street, [date] 
FROM CTE 
WHERE RN = 1 
+0

太棒了。接近,但非常感謝你。我現在可以睡了。 – Dero

+0

@Dero這是如何「保存匹配行的ID」?是不是缺少匹配但不是最大日期的所有行的ID?不質疑答案的有效性,我很高興你對此感到滿意,但它似乎不符合你相互矛盾的要求(我認爲這是不可能的)。 –

+0

@AaronBertrand - 我理解這個需求,因爲需要使用'fname,lname,street'的相同組合的最大日期行的ID,這意味着您不能只按這些列進行分組並獲得最大日期。儘管我可能誤解了這個答案 – Lamak

0

假設最大(日期)處於最大(ID):

select max(ID), fname, lname, street, max(date) 
from tablename 
group by fname, lname, street 
相關問題