我有一张这样的表:
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%正确,因为我还没有对其进行测试。
答案 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