我很难找到听起来很简单的查询。我正在使用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应该从查询返回)一旦应用了过滤器。
答案 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)
这将返回每个唯一名称的最新行。