2013-05-16 38 views
0

我使用下面的查询:如何使用子查询得到的结果我想

select distinct a.idclientecrm, 
(case 
when max(c.fcierre) is null then max(c.falta) 
else max(c.fcierre) 
end) as ultima_tarea, 
d.nombre 
from clientescrmporlistadeclientescrm a 
inner join clientescrmporlistadeclientescrm b on a.idclientecrm = b.idclientecrm 
inner join tareas c on a.idclientecrm = c.idclientecrm 
inner join resultadosdetareas d on c.idresultadodetarea=d.idresultadodetarea 
inner join clientescrm e on a.idclientecrm=e.idclientecrm 
where b.idlistadeclientescrm = 70 
and a.idlistadeclientescrm = 58 
and e.fbaja is null 
group by a.idclientecrm,d.nombre 
limit 10 

这给了我下面的结果。

|| *idclientecrm* || *ultima_tarea* || *nombre* || 
|| 10149991 || 2013-02-05 13:55:50 || Llamar cualquier agente || 
|| 10149991 || 2013-01-04 00:00:00 || Llamar mismo agente || 
|| 10149991 || 2013-04-23 14:47:05 || Ocupado || 
|| 10150908 || 2012-12-20 00:00:00 || Llamar cualquier agente || 
|| 10150908 || 2013-01-04 00:00:00 || Llamar mismo agente || 
|| 10150908 || 2012-11-29 00:00:00 || Venta || 
|| 10151225 || 2013-01-22 09:06:26 || Llamar cualquier agente || 
|| 10151225 || 2013-03-12 10:53:10 || Ocupado || 
|| 10151226 || 2012-07-04 00:00:00 || Llamar mismo agente || 
|| 10151226 || 2012-09-25 00:00:00 || Venta || 

我想这个子查询给我这样的结果:

|| *idclientecrm* || *ultima_tarea* || *nombre* || 
|| 10149991 || 2013-04-23 14:47:05 || Ocupado || 
|| 10150908 || 2013-01-04 00:00:00 || Llamar mismo agente || 
|| 10151225 || 2013-03-12 10:53:10 || Ocupado || 
|| 10151226 || 2012-09-25 00:00:00 || Venta || 

我不知道如果一个子查询做到这一点还是唯一的方式,如果我原来的查询可以进行修改,以获得结果。

如果这个例子不清楚,我想每个idclientecrm最近的塔里亚与它的通讯名称。从resultadosdetareas获取tarea的名称。

如果任何人有类似的例子,也许我可以适应我的查询。

在此先感谢!

回答

1

您正在寻找获得groupwise maximum,尽管在列的组合:

SELECT c.idclientecrm, 
     IFNULL(t.fcierre, t.falta) ultima_tarea, 
     d.nombre 

FROM  tareas c 
    JOIN (
      SELECT idclientecrm, 
        MAX(fcierre) fcierre, 
        MAX(falta ) falta 
      FROM  tareas 
      GROUP BY idclientecrm 
     ) t USING (idclientecrm) 
    JOIN resultadosdetareas d USING (idresultadodetarea) 

WHERE IF(t.fcierre IS NULL, t.falta=c.falta, t.fcierre=c.fcierre) 

GROUP BY c.idclientecrm 
+0

完美,正是我需要的。日Thnx! – Pietro

相关问题