【发布时间】:2019-08-05 23:46:18
【问题描述】:
我有一张桌子,看起来像:
group date color
A 1-1-2019 R
A 1-2-2019 Y
B 1-1-2019 R
B 1-2-2019 Y
B 1-3-2019 Y
B 1-4-2019 R
B 1-5-2019 R
B 1-6-2019 R
它是按组和日期排序的。我想要一个额外的列显示每个组的连续颜色“R”的序号。
所需输出:
group date color rank
A 1-1-2019 R 1
A 1-2-2019 Y null
B 1-1-2019 R 1
B 1-2-2019 Y null
B 1-3-2019 Y null
B 1-4-2019 R 1
B 1-5-2019 R 2
B 1-6-2019 R 3
我尝试使用按组和颜色列分区的窗口函数,但它返回的输出低于不正确。
错误的查询和输出:
SELECT
*,
RANK() OVER (PARTITION BY group, color order by group, date) as rank
FROM table
group date color rank
A 1-1-2019 R 1
A 1-2-2019 Y null
B 1-1-2019 R 1
B 1-2-2019 Y null
B 1-3-2019 Y null
B 1-4-2019 R 2
B 1-5-2019 R 3
B 1-6-2019 R 4
我想知道它在 SQL 中是否可行,还是应该切换到另一种语言(如 Python)?
【问题讨论】:
-
您使用的是 postgres (Microsoft SQL Server) 还是 mysql?你标记了 mysql 但你的 sql 看起来像 postgres
-
我正在使用 presto,但任何数据库解决方案都值得赞赏。谢谢。
-
您只想要
R的数字,而不是Y或任何其他颜色?可以有 any 重复项吗?如果是,如何处理? -
@RannieXue 。 . .我删除了不兼容的数据库标签。请仅使用您真正使用的数据库进行标记。
标签: sql gaps-and-islands