2011-10-17 161 views
0

我试图找到包含大于7且小于13.99的值的行数。 但是,以下查询总是返回0,这是不可能的。选择范围内的值

任何人都可以在我的查询中看到问题吗?

SELECT COUNT(*) FROM lead_status AS ls 
INNER JOIN leads AS l ON l.id = ls.lead_id 
INNER JOIN contacts AS c ON c.lead_id = l.id 
WHERE ls.discriminator = 'AUTO_POST' AND l.affiliate_id=1003 
AND ls.winner =1 AND l.test =0 AND l.create_date BETWEEN '2011-10-03' AND '2011-10-17' 
AND ls.amount >= 7 AND ls.amount <= 13.99; 
+0

这是为什么“是不可能的”?我根据你的情况没有记录,计数(*)将为零 –

+0

为什么不可能吗?,你完全可以确定吗?,请记住你有其他过滤器 – Lamak

+0

是的,我完全可以确定可以不是0. – ATMathew

回答

1

一个小修改,一些格式和猜疑:

SELECT COUNT(*) 
FROM lead_status ls 
INNER JOIN leads l ON l.id = ls.lead_id -- ls.id .. l.lead_id ?? 
INNER JOIN contacts c ON c.lead_id = l.id 
WHERE ls.discriminator = 'AUTO_POST' 
AND ls.winner = 1 
AND ls.amount >= 7 
AND ls.amount < 14 
AND l.affiliate_id = 1003 
AND l.test = 0 
AND l.create_date BETWEEN '2011-10-03' AND '2011-10-17'; 

您有ls.lead_idc.lead_id,但是l.id。这似乎不一致。错字?

你写:

大于7且小于13.99

您的代码表示:

大于或等于7并且小于或等于13.99

我改变它(我怀疑这是w帽子你真的想):

大于或等于7并且小于14

1

你的查询似乎很好。但为了确保首先删除查询中的所有过滤器,然后逐个添加它们,您将得到哪个过滤器导致计数为零。

1

你不发表您的模式,但也有可能是你需要在你的字符串日期转换为实际日期值:

...AND l.create_date BETWEEN STR_TO_DATE('2011-10-03', '%Y-%M-%d') AND 
          STR_TO_DATE('2011-10-17', '%Y-%M-%d') 
+1

而导致日期以UTC格式传递时不需要(即,YYYY-MM -DD)。当然可能是他的create_date字段不是真正的开始日期时间 – carpii