2011-10-17 157 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