2012-06-14 29 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 
相关问题