问题描述
我正在尝试找到一种方法来创建一个查询,当他们提交传统上伴随其他交易的交易时,该查询返回个人的交易。
示例(包含以下数据):
我们看到员工购买了航班(带有购买航班的日期)。然后他们提交了行李费,交易日期与出发日期和返回日期相匹配。然后我们看到他们提交了与任何航空公司日期都不匹配的第三个。
是否有办法识别每个收取行李费的人的航班起飞/返回日期与交易日期相匹配?在下面的示例中,每个员工的最后行李费是我希望返回的行,因为它们与各自航班的出发/返回日期不匹配。
员工 | 类型 | 交易日期 | 出发 | 返回 |
---|---|---|---|---|
123 | 航空公司 | 12052019 | 12082019 | 12132019 |
123 | 行李 | 12082019 | NULL | NULL |
123 | 行李 | 12132019 | NULL | NULL |
123 | 行李 | 12252019 | NULL | NULL |
567 | 航空公司 | 11052020 | 11082020 | 11132020 |
567 | 行李 | 11082020 | NULL | NULL |
567 | 行李 | 11132020 | NULL | NULL |
567 | 行李 | 11252020 | NULL | NULL |
解决方法
我认为你可以使用“WHERE NOT EXISTS”来做你想要的。像这样:
SELECT *
FROM Transactions T1
WHERE T1.Type = 'Baggage'
AND NOT EXISTS (
SELECT *
FROM Transactions T2
WHERE T2.Type = 'Airline'
AND (T1.TransactionDate = T2.Depart OR T1.TransationDate = T2.Arrive)
)
NOT EXISTS 根据出发日期或到达日期排除具有匹配航空公司记录的任何行李记录。 (单独放置 EXISTS 会做相反的事情......它只会显示匹配航空公司交易的行李交易。)您可能可以通过连接来做到这一点,但 EXISTS/NOT EXISTS 很好,因为它不会给您重复的行您的结果集。