我有以下数据:
test_date
2018-07-01
2018-07-02
...
2019-06-30
2019-07-01
2019-07-02
...
2020-06-30
2020-07-01
我想row_number
每次增加一个值,right(test_date,5) = '07-01'
以便最终结果如下所示:
test_date row_num
2018-07-01 1
2018-07-02 1
... 1
2019-06-30 1
2019-07-01 2
2019-07-02 2
... 2
2020-06-30 2
2020-07-01 3
我试图做这样的事情:
, ROW_NUMBER() OVER (
PARTITION BY CASE WHEN RIGHT(a.[test_date],5) = '07-01' THEN 1 ELSE 0 END
ORDER BY a.[test_date]
) AS [test2]
但这对我来说没有用。
有什么建议?
使用datepart
来标识正确的日期,然后在每次更改时将1加到总和上(假设每个日期最多不会有1行)。
declare @Test table (test_date date);
insert into @Test (test_date)
values
('2018-07-01'),
('2018-07-02'),
('2019-06-30'),
('2019-07-01'),
('2019-07-02'),
('2020-06-30'),
('2020-07-01');
select *
, sum(case when datepart(month,test_date) = 7 and datepart(day,test_date) = 1 then 1 else 0 end) over (order by test_date asc)
from @Test
order by test_date asc;
注意:如果像我上面所做的那样,将示例数据添加为DDL + DML,则可以使人们更轻松地进行测试。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句