2017-05-24 68 views
0

我需要一些帮助。我在SQL中查询的目标是使用两个单独查询(结果A + B)的结果计算一段时间内特定车库中一个变量(汽车)的频率。将一张表中的所有记录与另一张表中的所有记录进行比较

第一组结果(结果A)提供了车库中各自到达日期和出发日期(每个记录是一辆车,一个到达日期和一个出口日期)的汽车列表。第二组结果是使用@PeriodStartDate作为日期和@PeriodEndDate作为日期的CTE递归,提供结果(结果B),包括从开始日期到结束日期的所有日期。

从这里,我想要做的就是从结果A中获取每条记录,并将其与每个结果B的记录进行比较,从而有效地确定结果B的第一条记录/日期是否为1)> =到达日期,和2)<比出境日期。例如。如果从2016-02-04到2016-03-15有一辆车在车库里,并且期间开始和结束日期是2016-01-01到2016-03-01,我想取这辆车的记录,并且比较其到达日期和退出日期到2016-01-01到2016-03-01的所有日期,然后对结果A中的每个车辆/记录重复该过程。

完成此练习后,我想要在2016-01-01至2016-03-01之间查询出现在车库中的汽车数量。

到目前为止,A和B的结果查询已完成,但我真的不知道如何开始下一部分。

谢谢 米奇

+1

您正在使用哪个[DBMS](https://en.wikipedia.org/wiki/DBMS)? Postgres的?甲骨文? –

+0

编辑你的问题,并提供(简化)数据,解释你想完成什么。另外,使用您正在使用的数据库标记。 –

回答

0
Select Count(*) AS TotalCars, B.PeriodStart, B.PeriodEnd 
FROM A 
JOIN B 
ON A.Arrival <= B.PeriodEnd 
AND A.Exit > B.PeriodStart 
Group By B.PeriodStart, B.PeriodEnd 

这将返回的汽车,结束期到来之前和退出总数的时期开始

后,你可以改变

AND A.Exit > PeriodStart 

ISNULL(A.Exit, Getdate()) > PeriodStart 

要捕获最后一段时间还没有退出的汽车

+1

嘿。非常感谢您的快速回复。我把你提供的作为我的查询(现在有效)的基础。我和你一样,并添加了一个WHERE子句(WHERE“来自结果B的日期”> =到达日期+变量AND“来自结果B的日期”<退出日期)并将A加入B. – MikeyC

+0

@MikeyC感谢您的反馈,很高兴它有帮助 – MarkD

相关问题