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

按值对行进行分组和计数,直到其更改为止

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

按值对行进行分组和计数,直到其更改为止

那很有趣:)

;WITH cte as (SELECt Messages.Message, Timestamp, ROW_NUMBER() OVER(PARTITION BY Message ORDER BY Timestamp) AS gn,ROW_NUMBER() OVER (ORDER BY Timestamp) AS rnFROM Messages), cte2 AS (SELECt Message, Timestamp, gn, rn, gn - rn  as gbFROM cte ), cte3 AS (SELECt Message, MIN(Timestamp) As Ts, COUNT(1) as CntFROM cte2GROUP BY Message, gb)SELECt Message, Cnt FROM cte3ORDER BY Ts

这是结果集:

  Message   Cnt    A   2    B   1    A   3    B   1

该查询可能更短,但我以这种方式发布,因此您可以看到正在发生的事情。结果完全符合要求。这是最重要的部分,

gn -rn
该想法是对每个分区中的行进行编号,同时对整个集中的行进行编号,然后,如果从另一个中减去一个,则将获得每个组的“排名”。

;WITH cte as (SELECt Messages.Message, Timestamp, ROW_NUMBER() OVER(PARTITION BY Message ORDER BY Timestamp) AS gn,ROW_NUMBER() OVER (ORDER BY Timestamp) AS rnFROM Messages), cte2 AS (SELECt Message, Timestamp, gn, rn, gn - rn  as gbFROM cte )SELECt * FROM cte2Message Timestampgn  rn  gbA   2015-03-29 00:00:00.000 1   1   0A   2015-03-29 00:01:00.000 2   2   0B   2015-03-29 00:02:00.000 1   3   -2A   2015-03-29 00:03:00.000 3   4   -1A   2015-03-29 00:04:00.000 4   5   -1A   2015-03-29 00:05:00.000 5   6   -1B   2015-03-29 00:06:00.000 2   7   -5


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

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

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