Sql获取每个名称的月份最新记录

时间:2013-06-28 15:19:06

标签: sql sql-server-2005

此问题可能之前已经回答,但我无法找到如何获得这几个月的最新记录。

问题是我在同一个月有一张桌子,有时候排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:

似乎我不明白我的问题...... 所以我在我的例子中添加一些数据来向你展示我是如何做到的。 谢谢你们

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你能不能只做一个订单

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

然后只拉动前3?

答案 2 :(得分: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]