2012-06-08 37 views
1

我有一个名为users的表。使用日期条件将多个MySql查询组合成单个查询

id name date  cdate   c a b 
1  rz 42121221 42121221   0 1 0 
2  an 12122111 42121221   0 0 1 
3  cb 22121221 42121221   1 1 1 
4  ss 3321221 42121221   1 0 0 

我必须选择两个日期之间的值,然后我必须使用此语句找到计数。

SELECT COALESCE(SUM(IF(c=1 AND a=0 AND b=1 , 1, 0)),0) AS ACTIVE 
    WHERE DATE BETWEEN 'DATE 1' AND 'DATE 2', 
COALESCE(SUM(IF(c=0 AND a=0 AND b=1 , 1, 0)),0) AS INC 
    WHERE cdate BETWEEN 'DATE 1' AND 'DATE 2' 
FROM users where dealer id='2' 

此查询不起作用。

+1

为什么不是查询工作? –

+1

#1064 - 您的SQL语法错误;检查对应于你的MySQL服务器版本的手册,在'WHERE'DATE'BETWEEN'DATE 1'和'DATE 2', – coolboy

回答

0

这是您的查询,格式正确。每个SELECT语句只能有一个WHERE子句,并且FROM子句在SELECT子句之后和WHERE子句之前。

SELECT SUM(IF(c=1 AND a=0 AND b=1 AND DATE BETWEEN 'DATE 1' AND 'DATE 2', 1, 0)) AS ACTIVE, 
    SUM(IF(c=0 AND a=0 AND b=1 AND cdate BETWEEN 'DATE 1' AND 'DATE 2', 1, 0)) AS INC 
FROM users 
WHERE DATE BETWEEN 'DATE 1' AND 'DATE 2' 
    OR cdate BETWEEN 'DATE 1' AND 'DATE 2' 

我复制你的日期比较成IF语句。

此外,我删除了COALESCE子句,因为它在这种情况下是冗余的。 SUM总是返回一个值。

我把这些列放在一起,用逗号隔开,在SELECT子句后面。

现在您可能希望删除WHERE子句,具体取决于您要做什么。我也怀疑cdate BETWEEN 'DATE 1' AND 'DATE 2'。如果cdate是DATETIME列,则需要在常量中输入格式正确的日期。如果日期1和日期2列名,那么你就需要回蜱,而不是单引号,像这样:

cdate BETWEEN `DATE 1` AND `DATE 2` 

您应该考虑读书的SELECT syntax的文档。

+0

附近使用正确的语法,所以我有两个使用两个select staemet? – coolboy

+0

@coolboy,不,看看我上面的查询。您可以使用一个SELECT语句并用逗号分隔列。在[documentation](http://dev.mysql.com/doc/refman/5.0/en/select.html)中有很多很好的例子。 –

+0

活动的日期条件呢? – coolboy

0

我会做这样的事情来实现你在一个查询的需要:

试试看:

SELECT COALESCE(SUM(IF(u1.c=1 AND u1.a=0 AND u1.b=1, 1, 0)),0) AS ACTIVE, 
COALESCE(SUM(IF(u2.c=0 AND u2.a=0 AND u2.b=1, 1, 0)),0) AS INC 
from user u1 
left outer join user u2 on u1.row_id = u2.row_id 
where u1.DATE BETWEEN 'DATE 1' AND 'DATE 2' and 
u2.cdate BETWEEN 'DATE 1' AND 'DATE 2'