我需要一个MySQL查询,它将选择包含今天日期的一些数据。我构建了以下查询:
SELECT CRM_TRATATIVAS.ID_Vendedor, CRM_TRATATIVAS.Fecha
FROM CRM_TRATATIVAS
GROUP BY CRM_TRATATIVAS.ID_Vendedor, CRM_TRATATIVAS.Fecha, CRM_TRATATIVAS.ID_Categoria
HAVING (((CRM_TRATATIVAS.ID_Vendedor)=10 Or (CRM_TRATATIVAS.ID_Vendedor)=29 Or (CRM_TRATATIVAS.ID_Vendedor)=32) AND ((CRM_TRATATIVAS.Fecha)=Date()) AND ((CRM_TRATATIVAS.ID_Categoria)=14));
如果我取消= Date(),它就可以了。任何想法可能是什么问题?
最终的数据显示是这样的,没有括号和圆点(我找不到如何制作一张桌子!
Fecha Vendedor
2012-12-03 10:12:13 (10)
2012-12-03 12:14:16 (10)
2012-12-03 09:15:46 (29)
2012-12-03 13:35:56 (32)
固定!
我使用此查询修复。
SELECT CRM_TRATATIVAS.ID_Vendedor, CRM_TRATATIVAS.Fecha
FROM CRM_TRATATIVASGROUP BY CRM_TRATATIVAS.ID_Vendedor, CRM_TRATATIVAS.Fecha, CRM_TRATATIVAS.ID_Categoria
HAVING (((CRM_TRATATIVAS.ID_Vendedor)=10 Or (CRM_TRATATIVAS.ID_Vendedor)=29 Or (CRM_TRATATIVAS.ID_Vendedor)=32) AND ((DATE(CRM_TRATATIVAS.Fecha)) = CURDATE()) AND ((CRM_TRATATIVAS.ID_Categoria)=14));
由于Fecha是DATETIME
列,我在引用之前添加了Date以将其转换为日期。
答案 0 :(得分:1)
我想你可能想要以下内容:
SELECT c.ID_Vendedor, c.Fecha
FROM CRM_TRATATIVAS c
WHERE c.ID_Vendedor IN (10, 29, 32)
AND c.Fecha = Curdate()
AND c.ID_Categoria=14
-- GROUP BY c.ID_Vendedor, c.Fecha, c.ID_Categoria;
注意:我对此进行了更新,以使用WHERE
代替HAVING
子句。如果存在需要过滤的聚合函数,则使用HAVING
子句。此外,我不确定您为什么使用GROUP BY
列表中没有汇总功能的SELECT
条款
如果您的日期Fecha
有日期和时间,并且您只想匹配日期部分,那么您可能希望使用:
SELECT c.ID_Vendedor, c.Fecha
FROM CRM_TRATATIVAS c
WHERE c.ID_Vendedor IN (10, 29, 32)
AND Date(c.Fecha) = Curdate()
AND c.ID_Categoria=14
-- GROUP BY c.ID_Vendedor, c.Fecha, c.ID_Categoria;
答案 1 :(得分:0)
尝试更改
((CRM_TRATATIVAS.Fecha)=Date())
到
((CRM_TRATATIVAS.Fecha)=Date(NOW()))
MySQL DATE()
函数需要一个参数,它本身不会返回当前日期。您也可以使用CURDATE()
函数代替DATE(NOW())
答案 2 :(得分:0)
查询中是否有任何遗漏?如果你不需要一种聚合函数形式,我不会使用GROUP BY / HAVING子句。
查询如下:
SELECT CRM_TRATATIVAS.ID_Vendedor, CRM_TRATATIVAS.Fecha
FROM CRM_TRATATIVAS
WHERE (((CRM_TRATATIVAS.ID_Vendedor)=10 Or (CRM_TRATATIVAS.ID_Vendedor)=29 Or
(CRM_TRATATIVAS.ID_Vendedor)=32) AND ((CRM_TRATATIVAS.Fecha)=Date()) AND
((CRM_TRATATIVAS.ID_Categoria)=14));
答案 3 :(得分:0)
尝试改变:
CRM_TRATATIVAS.Fecha=Date()
用这个:
DATE(CRM_TRATATIVAS.Fecha)=CURDATE()
CURDATE()
返回当前日期,DATE(Fecha)
仅返回Fecha
的日期部分(不包括小时,分钟和秒)。我还建议你用这种方式编写查询,看起来更干净:
SELECT Distinct
CRM_TRATATIVAS.ID_Categoria,
CRM_TRATATIVAS.ID_Vendedor,
CRM_TRATATIVAS.Fecha
FROM
CRM_TRATATIVAS
WHERE
CRM_TRATATIVAS.ID_Vendedor in (10, 29, 32)
AND DATE(CRM_TRATATIVAS.Fecha) = CURDATE()
AND CRM_TRATATIVAS.ID_Categoria=14