2013-06-28 68 views
0

这个问题可能以前回答,但我无法找到如何获得月份的最新记录。Sql获得每个名称的月份的最新记录

问题是,我有一张表,有时在同一个月有2行。我不能在2行中使用聚合函数(我猜),我有不同的数据,我需要得到最新的。

例子:

name  Date nuA nuB nuC  nuD 
test1 05/06/2013 356 654 3957 7033 
test1 05/26/2013 113 237 399  853 
test3 06/06/2013 145 247 68  218 
test4 06/22/2013 37 37 6  25 
test4 06/27/2013 50 76 20  84 
test4 05/15/2013 34 43 34  54 

我需要得到这样的结果:

test1 05/26/2013 113 237 399 853 
test3 06/06/2013 145 247 68 218 
test4 05/15/2013 34  43 34 54 
test4 06/27/2013 50  76 20 84 

**在我的例子中,数据是为了,但我真正的表中的数据是不是为了。

现在我有这样的事情:

SELECT  Name, max(DATE) , nuA,nuB,nuC,nuD 
FROM   tableA INNER JOIN 
Group By Name, nuA,nuB,nuC,nuD 

但它没有工作,因为我想要的。

在此先感谢

EDIT1:

看来我是不是我的问题... 所以我在我的例子中添加一些数据告诉你我是如何做到这一点清楚。 Thanks guys

回答

2

使用SQL Server ranking functions

select name, Date, nuA, nuB, nuC, nuD from 
(Select *, row_number() over (partition by name, datepart(year, Date), 
datepart(month, Date) order by Date desc) as ranker from Table 
) Z 
where ranker = 1 
+0

以及我需要得到每个[名]的最新记录每个月,所以我更新,以显示你我是如何做到这一点 – JoSav

+0

@JoSav的例子,看到编辑后的版本 – iruvar

+0

我不明白你的选择*是否需要一个From表或类似的东西?或者我可以只把这个答案放在我的代码中,并应该工作? – JoSav

0

难道你们就不能只是做其次才拉动前3的订单

select * from tablename where Date = (select max(Date) from tablename) 

+0

这是不行的。 OP需要'name'中每个不同值具有最高'Date'的记录 – iruvar

0

试试这个

SELECT t1.* FROM Table1 t1 
INNER JOIN 
(
    SELECT [name],MAX([date]) as [date] FROM Table1 
      GROUP BY [name],YEAR([date]),MONTH([date]) 
) t2 
ON t1.[date]=t2.[date] and t1.[name]=t2.[name] 
ORDER BY t1.[name] 
+0

@JoSav检查更新后的查询 – bvr