栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何为每个岛屿的连续记录编号?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何为每个岛屿的连续记录编号?

这是使用窗口功能可以完成的方式。首先,我们创建一个CTE,该CTE具有一个标志,指示新的序列已开始,然后从中生成一个对序列号进行计数的标志。最后,我们对每个序列中的行进行计数以获得排名:

WITH cte AS (SELECt `group`, date, color,         COALESCE(color = LAG(color) OVER(ORDER BY `group`, date), 0) AS samecolor  FROM `table`),sequences AS (SELECt `group`, date, color,   SUM(samecolor = 0) OVER (ORDER BY `group`, date) AS seq_num   FROM cte)SELECt `group`, date, color,       ROW_NUMBER() OVER (PARTITION BY seq_num) AS `rank`FROM sequencesORDER BY `group`, date

输出:

group   date        color   rankA       1-1-2019    R       1A       1-2-2019    Y       1B       1-1-2019    R       1B       1-2-2019    Y       1B       1-3-2019    Y       2B       1-4-2019    R       1B       1-5-2019    R       2B       1-6-2019    R       3

dbfiddle上的演示

请注意

Y
,如果您希望将值
NULL
替换
rank
为此的定义,则此查询还会给出值的排名:

CASE WHEN color = 'Y' THEN NULL     ELSE ROW_NUMBER() OVER (PARTITION BY seq_num)      END AS `rank`


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470556.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号