获取表格中每周最长日期的记录

时间:2017-02-21 19:05:49

标签: sql-server

我有一张这样的表:

date     | data
-----------------
1/1/2017 | a
-----------------
1/2/2017 | b
-----------------
1/3/2017 | c
-----------------
1/7/2017 | d
-----------------
...
-----------------
2/2/2017 | a
-----------------
2/2/2017 | b
-----------------

我需要在表格中获取每周最长日期的数据。日期可以多次呈现,某些日期可能会丢失,而且可能不会在所有七天内添加数周。

第一个也许是最简单的解决方案是这样的:

select maxdate, data from (
select max(date) as maxdate from mytable group by DATEPART(wk, date)
) t1, maytable
where mytable.date = t1.date

但我被告知在没有使用max功能的情况下更好的解决方案。这甚至可能吗?上面有没有更好的方法?

这是一个假设性问题,上述查询可能不是100%正确,因为我还没有对其进行测试。

1 个答案:

答案 0 :(得分:0)

使用common table expression (cte)row_number(),您可以获得每周的最后日期和相关列,如下所示:

使用row_number()可以让每周最后[date]只获得一行。如果您需要[date]是一周中最后一天的所有行,则可以使用rank()dense_rank()代替row_number()

;with cte as (
  select *
    , rn = row_number() over (
      partition by datepart(week,[date]) 
      order by [date] desc)
  from mytable
)
select *
from cte 
where rn = 1

或没有像这样的cte:

select *
from (
  select *
    , rn = row_number() over (
      partition by datepart(week,[date]) 
      order by [date] desc)
  from mytable
  ) as cte
where rn = 1