我有以下表history_data
timestamp, data
2006-07-07 07:17:00.000,1
2006-07-07 07:18:00.000,2
2006-07-07 07:19:00.000,3
2006-07-07 07:20:00.000,**4**
2006-07-07 07:21:00.000,**5**
2006-07-07 07:22:00.000,**6**
2006-07-07 07:23:00.000,7
2006-07-07 07:24:00.000,8
2006-07-07 07:25:00.000,9
2006-07-07 07:26:00.000,**4**
2006-07-07 07:27:00.000,**5**
2006-07-07 07:28:00.000,**6**
2006-07-07 07:29:00.000,3
2006-07-07 07:30:00.000,6
2006-07-07 07:31:00.000,2
我有另一张表temp_records
records
4
5
6
预期结果
start_match,end_match
2006-07-07 07:20:00.000,2006-07-07 07:22:00.000
2006-07-07 07:26:00.000,2006-07-07 07:28:00.000
如何返回与temp_records中的子集匹配的句点的句点(start_match,end_match)。也就是说,按特定顺序匹配的连续行。
这是问题的简化定义。真实生活示例在history_data表中有4,000多行,在temp_records表中有< 100行,所以我希望我能找到一个有效的解决方案来匹配主集中的子集。
修改
如果我的请求中没有明确表示道歉,我表示歉意。我不是继续争论的类型,只是浪费双方的能量。我正在寻找的是SQL Server等效的http://www.pythian.com/blog/sql-for-pattern-matching-in-oracle-12c/。我正在寻找一种方法来匹配跨越一段时间的行序列。
答案 0 :(得分:0)
嘿,您可以使用以下查询来实现您的结果。
SELECT MAX(a.RECORDS) as RECORDS,b.StartTime,a.EndTime
FROM
(select t2.RECORDS,MAX(TIMESTAMP) EndTime from Table1 t1 join Table2 t2
on t1.[data] like '%'+CAST(t2.RECORDS as varchar(10))+'%'
GROUP BY t2.RECORDS) a
JOIN
(select t2.RECORDS,MIN(TIMESTAMP) StartTime from Table1 t1 join Table2 t2
on t1.[data] like '%'+CAST(t2.RECORDS as varchar(10))+'%'
GROUP BY t2.RECORDS) b
ON a.RECORDS=b.RECORDS
GROUP BY a.RECORDS,b.StartTime,a.EndTime