我需要一个查询,以排除过去10天内列Amount1, Amount2, Amount3, Amount4
的值为0的记录。
这是我的尝试。有没有更好或更正确的方法呢?
Select
count(*)
from
table
Where
Amount1 Not In (select Amount1 from table where Amount1 = 0)
And Amount2 Not In (select Amount2 from table where Amount2 = 0)
And Amount3 Not In (select Amount3 from table where Amount3 = 0)
And Amount4 Not In (select Amount4 from table where Amount4 = 0)
And Amount1 = ' & Item1 & '
And Amount2 = ' & Item2 & '
And Amount3 = ' & Item3 & '
And Amount4 = ' & Item4 & '
And DateColumn > = DateAdd(dd, -10, getdate())
答案 0 :(得分:0)
我可能会误解,但你过度复杂了......
SELECT COUNT(*) from table
WHERE Amount1 <> 0
AND Amount2 <> 0
AND Amount3 <> 0
AND Amount4 <> 0
AND DateColumn > = DateAdd("dd", -10, GetDate())
如果您知道您的金额值不能为负值,请使用&gt; 0,它比&lt;&gt; 0更有效。
什么是&#34; item1&#34;那里的东西?你在问题中没有提到这一点。
此外,您需要getdate&#34; dd&#34;的引号。
答案 1 :(得分:0)
您目前接近此方式的重大性能问题。嵌套的sub-selects
会破坏当前查询的性能。这是另一种方法......
*将@table
替换为您的表名...
SELECT COUNT(*) FROM @table
WHERE EXISTS(
SELECT *
FROM @table
WHERE
Amount1 > 0 AND
Amount2 > 0 AND
Amount3 > 0 AND
Amount4 > 0 AND
DateColumn >= DATEADD(DAY, -10, GETDATE())
)
另一方面,您错误地使用了DateAdd
。它应该是:DATEADD(DAY, -10, GETDATE())
以上是来自上方的查询证据......