我正在尝试评估系统中给定月份的交易启动次数以进行对帐流程。
交易参考可以在前一个月创建,所以我试图从最终计数中排除这些交易 - 首先想到的是使用“WHERE IN”类型方法,但结果总是0,这肯定是错误的当我单独执行查询时,子查询中的条目应该被排除。
我已经读过“WHERE IN”类型查询不可靠,尤其是当子查询中返回了大量数据集时,但我不知道如何重新编写这个以实现此目标的目标,并且去如果这样做的方式是有缺陷的,那就是前进了。
当前查询如下所示 - 感谢您的帮助:
SELECT Count(DISTINCT TransactionRef)
FROM Payments
WHERE Month(PaymentDate) = 8
AND Year(PaymentDate) = 2011
AND TransactionRef NOT IN
(SELECT DISTINCT TransactionRef
FROM Payments WHERE PaymentDate < '20110801')
修改 好的答案,似乎是一个空值让我错了...谢谢 - 这里是编辑过的代码,万一有人在将来偶然发现:
SELECT Count(DISTINCT TransactionRef)
FROM Payments
WHERE Month(PaymentDate) = 8
AND Year(PaymentDate) = 2011
AND TransactionRef NOT IN
(SELECT DISTINCT TransactionRef
FROM Payments WHERE TransactionRef IS NOT NULL AND PaymentDate < '20110801')
答案 0 :(得分:3)
如果TransactionRef列中有任何空值,则不在will return false中 使用存在。
如果NULL不是你的问题,那么你将不得不给我们mroe info
答案 1 :(得分:0)
我完全错了,或者您的查询与此完全相同:
SELECT Count(DISTINCT TransactionRef)
FROM Payments
WHERE Month(PaymentDate) = 8
AND Year(PaymentDate) = 2011
AND (PaymentDate >= '20110801')
编辑:再次阅读,您是否只想获得8月份记录的那些付费用户?然后你可以在where中使用BETWEEN。
你真正需要什么?
答案 2 :(得分:0)
使用不存在
SELECT Count(DISTINCT TransactionRef) FROM Payments p1
WHERE Month(PaymentDate) = 8
AND Year(PaymentDate) = 2011
AND not exists (SELECT 1 FROM Payments p2
where p2.TransactionRef =p1.TransactionRef
and PaymentDate < '20110801')