使用最大日期查询SQL distinct字段,返回表中的所有字段

时间:2011-01-13 18:11:20

标签: sql sql-server tsql sql-server-2008

我很难找到听起来很简单的查询。我正在使用SQL Server 2008。

我有这张桌子:

ID  Name  Date        Zone
----------------------------
01  AAA   01/01/2010  North
02  BBB   02/02/2010  South
03  AAA   05/01/2010  West 

因此,我需要过滤表格以获取不同的项目(按名称),但是,如果重复该项目,请获取具有最大日期的项目。以下是我想从上面的例子中得到的结果:

ID  Name  Date        Zone
----------------------------
02  BBB   02/02/2010  South
03  AAA   05/01/2010  West 

问题是我需要从表中获取所有字段(我的意思是:Id,Name,Date和Zone应该从查询返回)一旦应用了过滤器。

3 个答案:

答案 0 :(得分:6)

试试这个:

;WITH CTETable AS
(
    SELECT *, ROW_NUMBER() OVER(PARTITION BY Name ORDER BY [Date] DESC) ID
    FROM YourTable
)

SELECT *
FROM CTETable
WHERE ID = 1

答案 1 :(得分:4)

select
  t.ID,
  t.Name,
  t.Date,
  t.Zone
from
  ThisTable t
  inner join
    (select 
      Name, 
      max(Date) as Date 
    from 
      ThisTable 
    group by 
      Name) x on x.Name = t.Name and x.Date = t.Date

答案 2 :(得分:2)

SELECT a.columns
FROM table a
WHERE a.ID IN
(SELECT TOP 1 b.id FROM table b WHERE b.Name = a.Name ORDER BY b.Date DESC)

这将返回每个唯一名称的最新行。