SQL Server匹配数据子集

时间:2014-03-26 06:33:25

标签: sql sql-server

我有以下表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/。我正在寻找一种方法来匹配跨越一段时间的行序列。

1 个答案:

答案 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

另请查看FIDDLE LINK FOR FULL QUERY WITH RESULTS