Edu*_*rdo 4 t-sql sql-server group-by
在SQL Server中,我有以下数据,我想每周获取最新的行.
我有下表.该WW列(日期的周数)不存在,只是日期,我把它放在那里,以更好地解释查询的目的.
Number Date WW
392 2012-07-23 30
439 2012-07-24 30
735 2012-07-25 30
882 2012-07-26 30 *
193 2012-07-30 31
412 2012-07-31 31
425 2012-08-01 31
748 2012-08-02 31
711 2012-08-03 31 *
757 2012-08-07 32
113 2012-08-08 32 *
444 2012-08-15 33 *
Run Code Online (Sandbox Code Playgroud)
查询的期望结果应该是
882 30
711 31
113 32
444 33
Run Code Online (Sandbox Code Playgroud)
基本上我想要得到的是每周的最新一行.我找到了这样的例子在SQL服务器上获取上个月的记录 以找到最新的记录,但我不知道如何扩展它们以获取每周的结果列表.行可以存储在任何日期,例如可能在一周内没有结果,或者在一周内有5行,下一周有10行.我真的很感激这方面的一些提示.
你应该可以使用这样的东西:
select t1.number, t2.ww
from yourtable t1
inner join
(
select max(date) mxdate, datepart(week, [Date]) ww
from yourtable
group by datepart(week, [Date])
) t2
on t1.date = t2.mxdate
and datepart(week, t1.[Date]) = t2.ww;
Run Code Online (Sandbox Code Playgroud)
或者您可以使用CTE:
;with cte as
(
select number, datepart(week, [Date]) ww,
row_number() over(partition by datepart(week, [Date])
order by date desc) rn
from yourtable
)
select number, ww
from cte
where rn = 1
Run Code Online (Sandbox Code Playgroud)
如果您使用此MAX()版本并且您有两个具有相同日期的数字,那么您将返回两个记录.row_number()由于应用了row_number过滤器,使用该版本将只返回符合条件的一条记录(请参阅演示)