SQL查询列出每周的最新行

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行.我真的很感激这方面的一些提示.

Tar*_*ryn 7

你应该可以使用这样的东西:

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)

请参阅SQL Fiddle with Demo

如果您使用此MAX()版本并且您有两个具有相同日期的数字,那么您将返回两个记录.row_number()由于应用了row_number过滤器,使用该版本将只返回符合条件的一条记录(请参阅演示)