【发布时间】:2015-08-17 04:29:51
【问题描述】:
SELECT *
FROM Table1 D1 (nolock)
WHERE 1 = 1
AND NOT EXISTS (SELECT TOP 1 *
FROM Table2 D2 (nolock)
WHERE d1.Account = d2.Account
AND d2.Amount BETWEEN ( d1.Amount - 5 ) AND ( d1.Amount + 5 )
AND Datediff(DD, d1.SALEDATE, d2.SALEDATE) BETWEEN 0 AND 60)
我删除了很多与问题无关的功能。
本质上,我希望它在第一部分满足某些条件时查找记录(为了简单起见,我在这里使用 1=1),然后排除过去 60 天内销售的任何金额 -/ + 5 美元在同一个帐户上。
由于某种原因,它每次只返回 0 条记录,但在手动检查数据库表时,情况并非如此。我正在使用 Transact SQL。
【问题讨论】:
-
您是否有可能将您的差异倒退? (即它应该是
between -60 and 0- 或反向d1和d2) -
对结果没有影响。我已经以这种方式使用了 Datediff 数百次,没有任何问题。这是我第一次使用 d2.Amount BETWEEN (d1.Amount - 5) AND (d1.Amount + 5) 的表达式。
-
没问题。只是在黑暗中刺伤。你能给我们一个示例数据集吗?
-
我无法提供来自机密来源的数据。我什至不得不更改字段/列的名称以保护源的隐私等。我完全被难住了为什么这不起作用..我更像是程序员而不是 DBA,所以我想也许我是试图做一些在编程上很好但在 SQL 中的 SELECT 语句的上下文中根本不起作用的事情..
-
好的,解决了...这么简单...我忘了从 D1 中排除结果。所以现在它有一个 d2.indexkey d1.indexkey 语句,一切正常......哈哈
标签: sql sql-server tsql between