我在 MS SSMS 中连接两个表时遇到问题。
表1:
客户ID | 购买日期时间 |
---|---|
C1 | C1的PT1 |
C1 | C1的PT2 |
... | ... |
C1 | C1 的 PTn |
C2 | C2的PT1 |
C2 | C2的PT2 |
... | ... |
表2:
客户ID | 服务日期时间 |
---|---|
C1 | C1的ST1 |
C1 | C1的ST2 |
... | ... |
C1 | C1的STm |
C2 | C2的ST1 |
C2 | C2的ST2 |
... | ... |
我想将他们加入到新表中:
客户ID | 购买日期时间 | 服务日期时间 |
---|---|---|
C1 | C1的PT1 | C1的ST1 |
C1 | C1的PT1 | C1的ST2 |
... | ... | ... |
C1 | C1的PT1 | C1的STk |
C1 | C1的PT2 | C1的STk+1 |
C1 | C1的PT2 | C1的STk+2 |
... | ... | ... |
一个PurchaseDateTime与多个ServiceDateTime相关。并且最早相关的ServiceDateTime晚于PurchaseDateTime。最后一个相关的ServiceDateTime 早于下一个PurchaseDateTime。并且两个表中的所有日期时间都彼此不同。
例如,对于 Customer1,它就像: PT1 < ST1 < ST2 < ... < STk < PT2 < STk+1... < STk+j < PT3 ...
我尝试了代码:
SELECT
t1.CustomerID,
t1.PurchaseDateTime,
t2.ServiceDateTime
FROM
Table1 t1
JOIN
Table2 t2 ON t1.CustomerID = t2.CustomerID
WHERE
t2.ServiceDateTime >= t1.PurchaseDateTime
AND t2.ServiceDateTime <= (
SELECT MIN(PurchaseDateTime)
FROM Table1
WHERE PurchaseDateTime > t1.PurchaseDateTime
)
然而,它并没有给出我想要的。有人知道如何以正确的方式进行联合以获得上面的合并表吗?
提前致谢!
在相关子查询中,您缺少将其范围缩小到特定的 CustomerId。
SELECT
t1.CustomerID,
t1.PurchaseDateTime,
t2.ServiceDateTime
FROM
Table1 t1
JOIN
Table2 t2 ON t1.CustomerID = t2.CustomerID
WHERE
t2.ServiceDateTime >= t1.PurchaseDateTime
AND t2.ServiceDateTime <= (
SELECT MIN(PurchaseDateTime)
FROM Table1
WHERE PurchaseDateTime > t1.PurchaseDateTime
AND Table1.CustomerID=t1.CustomerID
)