【发布时间】:2015-07-29 14:43:12
【问题描述】:
这对我来说是一个相当新的练习,但我需要找到一种方法来识别表格中的模式序列。 例如,假设我有一个类似于以下的简单表:
现在我想做的是识别并分组所有具有值 5、9 和 6 的序列模式的记录,并在查询中呈现它们。您将如何使用 T-SQL 完成这项任务?
结果应如下所示:
我已经寻找了一些可能的例子来说明如何实现这一点,但找不到任何真正有帮助的东西。
【问题讨论】:
-
你能添加一点关于图案的文字吗?它可以有多大?
-
所以你会提供像
declare @Pattern as table ( Seq Int, Val Int ); insert into @Pattern ( Seq, Val ) values ( 1, 5 ), ( 2, 9 ), ( 3, 6 );这样的模式?看起来像是一个带有一些花哨的 Row_Number 匹配、分组和计数的连接。那时出现了一个奇怪的变体“间隙和孤岛”问题。 -
@BogdanBogdanov 该模式永远不会超过 3 个连续数字。在本例中为 5,9 和 6。但理想情况下,该解决方案应该能够在必要时通过一些修改来容纳更大的序列。该值是整数类型。希望我已经正确解释了您的问题。如果没有,请告诉我
-
@HABO 是的,该表将与您描述的完全一样,我已经考虑并探索了实现 ROW_NUMBER 函数的可能性,但我无法找到一种方法来识别这种模式。我也想过将 CTE 与 ROW_NUMBER 函数结合使用,但仍然没有成功
-
模式中的值是否保证是唯一的,即模式不能让
42出现两次?
标签: sql-server sql-server-2008 tsql common-table-expression