在两个表之间创建映射

时间:2017-06-27 15:38:32

标签: sql sql-server mapping

我有两个查询返回以下数据:

结果1:

2017-02-27 10:54:30.000
2017-02-27 10:55:30.000
2017-02-27 10:59:30.000
2017-02-27 11:02:30.000

结果2:

2017-02-27 10:52:42.000    2017-02-27 10:55:00.000
2017-02-27 10:55:05.000    2017-02-27 10:55:43.000
2017-02-27 10:57:30.000    2017-02-27 11:00:12.000
2017-02-27 11:01:55.000    2017-02-27 11:02:57.000

将第二个结果集中的行视为时间间隔,让我们调用第一列' start'第二栏'结束'我需要的是创建某种映射并找出第二个结果集中有多少行没有匹配'在第一组。我的意思是......

以下是一个示例:查看第二个表的第一行R1。

2017-02-27 10:52:42.000    2017-02-27 10:55:00.000

如果第一个表中没有行,那么它的值将在起始值和结束值之间,那么我们将返回行R1。输出应该是所有这些行的计数。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

这里的一种方法是将包含间隔的表连接到第一个表。然后计算第二个表中的所有记录,其中第一个表中没有时间戳落在一个间隔之间。

SELECT COUNT(*)
FROM Result2 r2
LEFT JOIN Result1 r1
    ON r1.dt BETWEEN r2.interval1 AND r2.interval2
WHERE r1.dt IS NULL

答案 1 :(得分:1)

  

如果第一个表中没有行,那么它的值将在起始值和结束值之间

这可以直接翻译成SQL:

select count(*) from Result2 r2
where not exists (
    select * from Result1 r1
    where r1.value between r2.start and r2.end
)