【发布时间】:2011-09-12 12:38:54
【问题描述】:
我正在尝试在我们的系统中评估在给定月份内启动交易的次数,以进行对帐流程。
可以在上个月创建交易参考,因此我试图从最终计数中排除这些交易 - 第一个想法是使用“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')
【问题讨论】:
-
您可能对
TransactionRef有一个NULL值。这将始终导致NOT IN返回零结果。 -
顺便说一句:你到底在哪里读到
"WHERE IN" type queries aren't reliable?我建议忽略来自同一来源的任何其他内容。 -
谢谢 :) 谷歌的力量似乎完全可以把一个人送走。