我正在尝试分配下面示例中的排名( rowFinal ),其中行按 GalleryId 进行分区,并按 StartDateKey排序上升。但是,我需要一个新的' EventName 使用StartdateKey 20131219重新启动计数,如下例所示。
GalleryId StartDateKey row EventName rowFinal
425934233 20130226 1 Renew 1
425934233 20130326 2 Renew 2
425934233 20130426 3 Renew 3
425934233 20130526 4 Renew 4
425934233 20130626 5 Renew 5
425934233 20131219 6 New 1
425934233 20140119 7 Renew 2
425934233 20140219 8 Renew 3
425934233 20140319 9 Renew 4
425934233 20140419 10 Renew 5
…
425931351 20121210 1 Renew 1
425931351 20130110 2 Renew 2
425931351 20130210 3 Renew 3
425931351 20130310 4 Renew 4
425931351 20130410 5 Renew 5
425931351 20130510 6 Renew 6
425931351 20130610 7 Renew 7
425931351 20130710 8 Renew 8
425931351 20130810 9 Renew 9
由于速度的原因,解析和更新每一行(而循环)被证明是不实际的。任何建议都将深表赞赏。
答案 0 :(得分:1)
你可以用一招来做到这一点。我们的想法是根据" New"的数量对行进行分组。记录在它之前。然后你可以使用累积总和来做到这一点:
select t.*,
row_number() over (partition by GalleryId, numRenew order by startdatekey) as rowFinal
from (select t.*,
sum(case when EventName = 'Renew' then 1 else 0 end) over
(partition by partition by GalleryId order by startdatekey) as numRenew
from table t
) t;
答案 1 :(得分:0)
尝试将不同的部分分成不同的查询并将它们组合在一起。
答案 2 :(得分:0)
select *,
row_number() over(partition by galleryid,substring(startdatekey,7,2) order by startdatekey)
as rowFinal
from tablename;
看起来你在galleryid上分区,也在startdatekey的最后2个字符上分区。