0

我有以下 SQL 数据库,并希望按顺序对它们进行分组并为每个组分配 ID。

时间 线 颜色
2021-11-02 下午 3:00:00 1 黑色的
2021-11-02 下午 3:00:01 1 白色的
2021-11-02 下午 3:00:02 1 红色的
2021-11-02 下午 3:00:04 1 红色的
2021-11-02 下午 3:00:05 1 黑色的
2021-11-02 下午 3:00:06 1 黑色的
2021-11-02 下午 3:00:00 2 黑色的
2021-11-02 下午 3:00:01 2 黑色的
2021-11-02 下午 3:00:02 2 白色的
2021-11-02 下午 3:00:03 2 白色的
2021-11-02 下午 3:00:03 2 白色的
2021-11-02 下午 3:00:03 2 黑色的
2021-11-02 下午 3:00:03 2 黑色的

我正在寻找的结果是

时间 线 颜色 数量 组 ID
2021-11-02 下午 3:00:00 1 黑色的 1 1
2021-11-02 下午 3:00:01 1 白色的 1 2
2021-11-02 下午 3:00:02 1 红色的 2 3
2021-11-02 下午 3:00:04 1 红色的 2 3
2021-11-02 下午 3:00:05 1 黑色的 2 4
2021-11-02 下午 3:00:06 1 黑色的 2 4
2021-11-02 下午 3:00:00 2 黑色的 2 1
2021-11-02 下午 3:00:01 2 黑色的 2 1
2021-11-02 下午 3:00:02 2 白色的 3 2
2021-11-02 下午 3:00:02 2 白色的 3 2
2021-11-02 下午 3:00:03 2 白色的 3 2
2021-11-02 下午 3:00:04 2 黑色的 2 3
2021-11-02 下午 3:00:05 2 黑色的 2 3

数量基本上是连续行中相同颜色的#。

组 ID 是用于逐行更改颜色的顺序 ID。

我只是想不通,因为它需要在“时间”和“行”列中是连续的,并且无法聚合。

4

1 回答 1

1

您可以这样做:

SELECT * , COUNT(*) OVER (PARTITION BY Line, groupId) Qty
FROM (
    SELECT *
      , rank() OVER (PARTITION BY Line ORDER BY Insertdate) 
      - rank() OVER (PARTITION BY Line, colour ORDER BY Insertdate) AS GroupId
   FROM tablename
) t ORDER BY line, Insertdate

db<>在这里摆弄

于 2021-11-02T20:25:54.990 回答