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

に等しいです

私はそれを次のように変更しました。あなたが本当にしたい帽子):「ちょうどことはできない」ということですなぜ

以上7に等しい未満14

1

あなたのクエリはうまくいるようです。しかし、最初にクエリのすべてのフィルタを削除してから、それらを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