PDA

Ver la Versión Completa : campos con valores repetidos


luk2009
23-01-2011, 18:47:23
numero fecha cliente evento estatus
100001 15/01/2010 0001 BA01 PENDIENTE
100002 15/01/2010 0001 BA01 PENDIENTE
100005 15/01/2010 0001 BA01 PENDIENTE
100020 15/01/2010 0001 BA01 PENDIENTE
100025 15/01/2010 0021 MA01 PENDIENTE
100028 15/01/2010 0021 MA01 PENDIENTE
100041 15/01/2010 0001 MA01 PENDIENTE

Quiero que se vea:

numero fecha cliente evento estatus
100001 15/01/2010 0001 BA01 PENDIENTE
100025 15/01/2010 0021 MA01 PENDIENTE
100041 15/01/2010 0001 MA01 PENDIENTE


Quiero filtrar por por evento + cliente y cuando estatus sea pendiente.
alguna idea?

Caral
23-01-2011, 19:16:36
Hola

Select distinct cliente, evento Form tutabla where estatus = 'PENDIENTE' group bye cliente, evento;
Saludos

Casimiro Notevi
23-01-2011, 19:20:46
¿Pero ahora mismo cómo lo haces?, ¿un select?, ¿qué base de datos?

luk2009
23-01-2011, 19:26:24
El problema es que si lo hago como dice caral entonces solo recibo dos campos y quiero obtener todos los campos para visualizarlos en el dbgrid.
la base de datos es firebird 2.1
with DMmonitorenred.ZQactivas do
begin
Close;
SQL.Clear;
SQL.add('select * from Activas inner join evento on activas.evento=evento.evento left join acmsub on activas.csid=acmsub.csid ');
SQL.add(' where completa <> :pcompleta ');
SQL.Add('order by alarmnum desc');
ParamByName('pcompleta').AsString:='COMPLETADA';

pero con ella obtengo valores repetidos, quiero poder filtrarla y que solo se obtenga lo que indico en el primer mensaje

Caral
23-01-2011, 19:34:02
Hola
No se:

Select distinct cliente, evento, numero, fecha Form tutabla where estatus = 'PENDIENTE' group bye cliente, evento, numero, fecha

El asunto esta en el group by, supongo.
Saludos

luk2009
23-01-2011, 19:36:32
si pongo el campo numero que es primary key y autoincrementable, no me funciona la consulta y me muestra todos los valores repetidos.
Por otro lado queria aclarar que deseo filtrar por el evento, ya que un mismo cliente podria tener dos eventos distintos y quiero que se vean.

Caral
23-01-2011, 19:39:08
Hola
El problema es que tienes varios campos que se repiten, pero otros son diferentes.
Yo trataria de usar, LAST o MIN o MAX, ademas del DISTINCT que es el que te servira.
Tuve un problema similar y recurri a LAST.
En Firebird.
Saludos

luk2009
23-01-2011, 19:42:19
talvez pueda crear un campo calculado con cliente y evento y hacer el distinct en funcion de este. que piensas?

Caral
23-01-2011, 19:44:09
Hola
Alguna vez he anidado dos select. pero no me hagas mucho caso:

Select distinct cliente, evento Form tutabla
(select * From tutabla where estatus = 'PENDIENTE')
where estatus = 'PENDIENTE' group bye cliente, evento;
Saludos

luk2009
23-01-2011, 19:51:16
no es como lo pones, pero he tratado con subconsultas y no caigo con la respuesta pero voy a ponerme a leer mas sobre union y otros detalles.
la idea prodria ser anidar consultas, pero voy a investigar para ver que sale

Caral
23-01-2011, 19:58:56
Hola
Solo ideas:
Digamos que tienes dos query, en el primero defines los campos iguales y en el segundo defines todo pero relacionado al query1.
Algo asi:

Query1.sql.text:= 'Select distinct cliente, evento Form tutabla
where estatus = ''PENDIENTE'' group bye cliente, evento';
Query1.open;

Query2.sql.text:='select * From tutabla where cliente = '+Query1.Filebyname('cliente').Value;
Query2.open;

Por supuesto muestras en el dbgrid el resultado del query2.
Solo ideas amigo.
Saludos

luk2009
23-01-2011, 20:08:01
Gracias por tu idea. La verdad es que la habia contemplado, pero la necedad de ponerlo todo en una sola consulta, no me ha permitido probarla. Dejame probar y te digo como me va.

Gracias de nuevo

coso
24-01-2011, 14:45:57
Hola,
Si quieres filtrar por dos campos tan solo tienes que usar el 'and'



select from tabla where cliente = 1 and estatus = 'PENDIENTE'



Saludos.

luk2009
02-02-2011, 00:04:51
Hola,
Si quieres filtrar por dos campos tan solo tienes que usar el 'and'

Código Delphi [-] (http://www.clubdelphi.com/foros/#) select from tabla where cliente = 1 and estatus = 'PENDIENTE'


Saludos.

Gracias por tu respuesta, pero ademas de que le falta el * despues del select o por lo menos poner los campos que quiero obtener en la consulta, creo que tambien te falta entender bien lo que deseo. Lo que quiero es agrupar los registros que tienen un mismo valor en un campo especifico y que ya se encuentran dentro de un select que busca los que tengan el valor 'Pendiente'

La verdad que la aproximacion mas cercana a la resolucion del problema es la que me ha dado caral en delphiaccess. Esta es usar un select y en la que selecciono segun el valor minimo o maximo de una cantidad X de registros con un campo con valor repetido.

Ejemplo

select min(alarmnun) as num, csid, estatus from tabla where estatus ='pendiente' group by csid, estatus order by csid desc

coso
02-02-2011, 02:24:46
Quiero filtrar por por evento + cliente y cuando estatus sea pendiente.

Ah, entonces entendi mal esta frase. Mil disculpas.

Caral
02-02-2011, 13:39:30
Hola
Ah, entonces entendi mal esta frase. Mil disculpas.
No entendiste mal amigo, en principio creo que todos entendimos lo mismo.
Lo que se nos paso por alto fue que luk2009 quería reducir la lista a solo un registro por dato y usando un filtro común no lo hacia.
Saludos

coso
02-02-2011, 13:57:56
Si que lo entendi mal, pense que queria filtrar por evento, cliente y estatus.

Quiero filtrar por por evento + cliente y cuando estatus sea pendiente

Por que dices que no lo entendi mal, Caral?

Caral
02-02-2011, 14:11:25
Hola
Sera por que yo entendi lo mismo en principio ?.
Saludos

coso
02-02-2011, 14:19:01
No te entiendo, no se que quieres decir

Caral
02-02-2011, 14:25:30
Hola
Anem home, sé que ho entens.
Tots ens equivoquem i només tracte de fer-te sentir millor.
No crec que es necessiti filar prim.
Saludos

coso
02-02-2011, 14:32:21
Jajaja seria vinga, no anem.
Me pones que no lo entendi mal, pero yo si se que lo entendi mal. Por que tu dices lo que yo entiendo o dejo de entender?

coso
02-02-2011, 14:42:07
Por otra banda...sentir millor? entonces supones tambien que me ha sentado mal equivocarme, no?

coso
02-02-2011, 14:46:11
Jolin, chico, con tanta empatia...no se yo si estamos hechos el uno para el otro o algo asi...No sera el caso, verdad?

Caral
02-02-2011, 14:56:04
Hola
Me da la impresión de que mis palabras te afectan en algo, ahora soy yo el que no entiendo a que va todo esto.
Si has tomado mis palabras a mal te pido disculpas, pero nunca ha sido mi intención indisponerte.
Saludos

coso
02-02-2011, 14:59:00
Si, me ha sentado mal, basicamente esto de que TU digas que es lo que YO entendi. Me tomas la palabra y ya soy algo grandecito y maduro para eso. Aun no me has contestado a esto:

Me pones que no lo entendi mal, pero yo si se que lo entendi mal. Por que tu dices lo que yo entiendo o dejo de entender?


Seguramente, no tienes respuesta. Yo si la tengo. Tus disculpas de todas maneras, aceptadas. Saludos.

Caral
02-02-2011, 15:23:06
Hola
La respuesta la he dado.
Decir: No te equivocaste (fue la primera apreciación que tuvimos todos, incluyéndome) es poner palabras en tu boca?, es decir Caral DECIDE que coso no entendió mal, es tomarte la palabra?, bueno; nunca fue mi intención que se tomase así.

Me da la impresión de que quieres crear un conflicto donde no lo hay y que por alguna razón, que no entiendo, haces esto mas grande de lo que es.
Me alegra que aceptes mis disculpas, aunque sea a regañadientes.

No voy a entrar al trapo, nunca ha sido mi intención ofenderte en lo mas mínimo.
Saludos

coso
02-02-2011, 16:37:19
No entendiste mal amigo, en principio creo que todos entendimos lo mismo.

Si lo entendi mal, en cambio tu dices que no, que no lo entendi mal. Al preguntarte por ello, sigues sin contestarme.

La respuesta la he dado.
Mentira

No te equivocaste (fue la primera apreciación que tuvimos todos, incluyéndome) es poner palabras en tu boca?

Esto...si me equivoque. Para mi no es pecado equivocarme, me equivoco mil veces al dia. Tots ens equivoquem i només tracte de fer-te sentir millor. No me sentia mal para nada. Tambien sobra bastante la frase no?

Me alegra que aceptes mis disculpas, aunque sea a regañadientes. Otra mentira: quien te ha dicho que es a regañadientes?

Y podria estarme años analizando tus frases (fue la primera apreciación que tuvimos todos, incluyéndome ahora ya no solo mi palabra, si no la de todos, nada mas y nada menos) pero se que en el mundo tienen que haber personas asi, por lo que no voy a insistir mucho mas.

La cuestion es que te has disculpado, por lo que seguramente, en el fondo, sabes muy bien por donde van los tiros, y para mi, eso ya es bastante.

Saludos.