Foros del Web » Programando para Internet » PHP »

Filtrar y agrupar registros

Estas en el tema de Filtrar y agrupar registros en el foro de PHP en Foros del Web. Hola amigos, espero me puedan ayudar... Estoy realizando un filtrado y agrupamiento sobre unos registros, pero no he podido realizar un segundo filtro sobre los ...
  #1 (permalink)  
Antiguo 26/03/2011, 18:07
 
Fecha de Ingreso: enero-2011
Mensajes: 5
Antigüedad: 13 años, 3 meses
Puntos: 0
Pregunta Filtrar y agrupar registros

Hola amigos, espero me puedan ayudar...

Estoy realizando un filtrado y agrupamiento sobre unos registros, pero no he podido realizar un segundo filtro sobre los registros obtenidos en la consulta.

La idea es la siguiente:

Tengo dos tablas.
En la primera se realiza el registro de personas, asociadas a un codigo (ID) autoincrement.

En la otra se realiza un seguimiento de eventos, que se asocian al codigo (ID) de la tabla uno. Esta tabla tiene una columna estado (pendiente, negativo, efectivo, otros), fecha, evento (varios ).

Necesito filtrar los eventos negativos, efectivos y pendientes (ya esta).
Agruparlos por los codigos de los registros de la tabla principal (ya esta).

El problema es que solo necesito sacar de estos el ultimo registro, de acuerdo a la fecha, que sea negativo/efectivo/pendiente, y organizado por el codigo.

Lo que tengo hasta ahora es:

SELECT
seguimiento.Evento,
seguimiento.Estado,
seguimiento.Codigo,
seguimiento.FechaEvento
FROM seguimiento
LEFT OUTER JOIN datospersonales ON seguimiento.Codigo = datospersonales.Codigo
WHERE ( seguimiento.Estado ="Efectiva" OR seguimiento.Estado ="Negativa" OR seguimiento.Estado ="Pendiente" )
GROUP BY seguimiento.Codigo

Esta consulta me genera unos datos, pero no son los registrados de forma mas reciente. No se porque me saca solo los primeros registros despues de aplicar el filtro de Ne/pen/efe

alguna idea que me aporten???
  #2 (permalink)  
Antiguo 26/03/2011, 19:01
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Filtrar y agrupar registros

Porque le estás diciendo que muestre la consulta de la tabla de izquierda, no importando lo que hayas filtrado en la tabla derecha. Para ello requieres filtrar en la tabla de la izquierda.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 03/04/2011, 08:47
 
Fecha de Ingreso: enero-2011
Mensajes: 5
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Filtrar y agrupar registros

mmm. realmente lo organize asi, pero si tienes una mejor idea, bienvenida.. estoy un poco enredado.

Para mas claridad la idea es:

tabla1
codigo datos-usuario
1 nombre1
2 nombre2
3 nombre3

tabla2
fecha evento estado codigo
01/01/2011 llamada pendiente 1
01/02/2011 visita efectiva 1
01/02/2011 llamada pendeinte 2


El filtro deberia filtrarme por estado (pen,efe,neg) y por ultima fecha. agrupado por el codigo.

filtro

01/02/2011 visita efectiva 1
01/02/2011 llamada pendiente 2

Les agradezco sugerencias-...¡¡
  #4 (permalink)  
Antiguo 03/04/2011, 10:16
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Filtrar y agrupar registros

A ver si te entendí. Tu tienes dos tablas y ¿tu quieres agrupar la segunda tabla y mostrar cuantos tienes pendientes y cuantos tienes efectivo, etc? Si no es así, haste un ejemplo bastante completo para poder entenderte mejor.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 04/04/2011, 11:02
 
Fecha de Ingreso: enero-2011
Mensajes: 5
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Filtrar y agrupar registros

ok..

Tengo dos tablas.

La tabla 1, tiene los datos de un grupo de personas. Cada persona tiene un codigo (eL ID asignado como autoincrement) para identificarlo en el sistema.

En la tabla 2 llevo un historico de eventos asociados a la tabla 1 con un LEFT OUTER JOIN entre los campos tabla1.codigo y tabla2.codigo.

Hasta aqui todo funciona correctamente.

Necesito generar una consulta para un reporte que me saque del historico (tabla2) el ultimo evento (efe,pen,neg) de cada usuario.

Creo que seria algo como agrupar por codigo, y aplicar un filtro por Pen,efe,neg.
Hasta aqui no hay problema....

Pero cuando trato de filtrar solo los ultimos registros de acuerdo a la fecha mas reciente, me muestra los primeros registros (de acuerdo a la fecha) pen,efe,neg.

Trate de organizar los registros por fechas desencientes, pero al aplicar el agrupamiento, me muestra igualmente los primeros registros.

tabla2
fecha evento estado codigo
01/01/2011 llamada pendiente 1
01/02/2011 visita efectiva 1
01/01/2010 llamada pendiente 2
01/02/2011 visita Efectiva 2

Consulta.
SELECT
Evento,
Codigo,
FechaEvento,
Estado
FROM seguimiento
WHERE ( Estado ="Efectiva" OR Estado ="Negativa" OR Estado ="Pendiente" )
GROUP BY Codigo
ORDER BY FechaEvento DES
resultado

fecha evento estado codigo
01/01/2011 llamada pendiente 1
01/01/2010 llamada pendiente 2

(FECHA EQUIVOCADA)

Tambien trate de aplicar usando MAX para sacar el maximo registro, pero los otros campos no coincidian con la fecha...
SELECT
MAX(Evento),
Codigo,
MAX(FechaEvento),
Estado
FROM seguimiento
WHERE ( Estado ="Efectiva" OR Estado ="Negativa" OR Estado ="Pendiente" )
GROUP BY Codigo
ORDER BY FechaEvento DES
resultado

fecha evento estado codigo
01/02/2011 visita efectivo 1
01/02/2011 visita efectivo 2

(EVENTOS NO COINCIDEN CON FECHA Y OTROS CAMPOS)

No se como podria realizar la consulta para obtener un resultado asi ..................

Resultado OK.

fecha evento estado codigo
01/02/2011 visita efectiva 1
01/02/2011 visita Efectiva 2


Lo otro es si exite alguna herramienta que me permita evaluar paso a paso la consulta SQL para mirar donde esta la falla..??


Ideas...???

gracias por la colaboracion ¡¡¡¡
  #6 (permalink)  
Antiguo 04/04/2011, 19:38
 
Fecha de Ingreso: enero-2011
Mensajes: 5
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Filtrar y agrupar registros

Encontre una forma de realizar lo que estaba buscando.

SELECT
Evento,
Codigo,
Estado,
FechaEvento
FROM seguimiento
WHERE (Codigo, Estado ,FechaEvento) = (SELECT max(Codigo) as cod, Estado ="Efectiva" OR Estado ="Negativa" OR Estado ="Pendiente", max(FechaEvento) as Fecha
FROM seguimiento as segui WHERE segui.codigo=seguimiento.Codigo GROUP BY seguimiento.Codigo)
ORDER BY Codigo

Me genera el resultado que buscaba.

Ahora necesito para el reporte insertar un campo de la tabla de datos personales.
Pero al modificar la consulta me saca todos los demas datos, menos los que me sacaba en la consulta de arriba..

La consulta la modifique asi:

SELECT
seguimiento.Evento,
seguimiento.Codigo,
seguimiento.Estado,
seguimiento.FechaEvento,
datospersonales.Distrito
FROM seguimiento
, datospersonales
WHERE (seguimiento.codigo, seguimiento.Estado, seguimiento.FechaEvento) = (SELECT max(seguimiento.codigo) as cod, seguimiento.Estado ="Efectiva" OR seguimiento.Estado ="Negativa" OR seguimiento.Estado ="Pendiente", max(seguimiento.FechaEvento) as Fecha
FROM seguimiento as segui WHERE segui.codigo = seguimiento.codigo GROUP BY seguimiento.codigo)
ORDER BY seguimiento.Codigo

Esta consulta me mustra todos los demas datos, sin agrupar ¡¡¡

Alguien que me ilumine.. ¡¡

Gracias.. ¡¡¡
  #7 (permalink)  
Antiguo 04/04/2011, 22:34
 
Fecha de Ingreso: febrero-2010
Ubicación: Republica Dominicana
Mensajes: 53
Antigüedad: 14 años, 2 meses
Puntos: 4
Respuesta: Filtrar y agrupar registros

Intenta utilizando una consulta mas o menos de esta manera
$sql = 'SELECT * FROM seguimiento ORDER BY Id DESC';
$result = $db->query($sql);
$output[] = '<div >';


while ($row = $result->fetch()) {
$output[] = '<div">'.$row['Estado'].'<br/>'.$row['FechaEvento'].' RD$: '.$row['Codigo'].'
<div>';
}
$output[] = '</div>';
echo join('',$output);

?>

Sigue mostrando los campos de la siguiente manera.
.$row['FechaEvento']

asi sucesivamente...
Espero que me hayas entendido sino me das un toque.

Etiquetas: agrupar, filtrar, registros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:50.