【问题标题】:Get distinct name, address, max(date) while preserving ID在保留 ID 的同时获取不同的名称、地址、最大值(日期)
【发布时间】:2012-06-14 16:41:44
【问题描述】:

我的表结构如下:

ID | fname | lname | street | date

我正在尝试获取不同的 fname、lname、street 和 max(date),但同时也保留匹配行的 id。所以可能会有多行匹配的 fname、lname、street 但都具有不同的 ID

我找到了一些几乎适合此但不完全适合的解决方案。如果已经涵盖,我深表歉意。

谢谢。

【问题讨论】:

  • “保留” id 是什么意思?您是否希望 id 成为行中以逗号分隔的值列表?
  • 问这个问题的简单方法 - 显示示例数据 - 显示预期结果。听起来你需要一个别名查询来执行以下...(SELECT RecordID, MAX(Date) AS TheMax FROM ... GROUP BY RecordID) t ON t.RecordID = yourTable.RecordID
  • 您要求数据库做不同的事情...提供一组不同的记录,而不包括 ID 作为区分标准的一部分。并包括使记录独一无二的一件事。你必须选择其中一个。

标签: sql sql-server-2008


【解决方案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

【讨论】:

  • 太棒了。接近了,但非常感谢你。我现在可以睡觉了。
  • @Dero 如何“保留匹配行的 id”?您是否缺少匹配但不是最大日期的所有行的 ID?不质疑答案的有效性,我很高兴您对此感到满意,但它似乎与您的冲突要求不符(我认为无论如何都不可能满足)。
  • @AaronBertrand - 我理解的要求是需要具有fname, lname, street 的相同组合的最大日期的行的ID,这意味着您不能只按这些列分组并获得最大日期。这个答案提供了,虽然我可能误解了
【解决方案2】:

假设 max(date) 在 max(id) 中:

select max(ID), fname, lname, street, max(date)
from tablename
group by fname, lname, street

【讨论】:

    猜你喜欢
    • 2016-01-10
    • 1970-01-01
    • 2022-08-18
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2021-07-01
    • 2021-11-04
    相关资源
    最近更新 更多