Ir al contenido


Foto

[RESUELTO] CONSULTA SQL2000 A SQL FIREBIRD


  • Por favor identifícate para responder
2 respuestas en este tema

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 15 septiembre 2009 - 10:53



sql
  1. SELECT  ACMSUB.CSID, ACMSUB.CLIENTES, COUNT(evento.Evento) AS DISPAROS, evento.Evento, evento.Detalle, COUNT(DISTINCT CONVERT(VARCHAR(10),
  2. CENTRAL.fechan,121)) AS DIASDISPAROS
  3.  
  4. FROM  CENTRAL INNER JOIN ACMSUB ON CENTRAL.CSID = CMSUB.CSID INNER JOIN  evento ON CENTRAL.EVENTO = evento.Evento
  5.  
  6. WHERE  (evento.Evento LIKE 'BA%' OR evento.Evento LIKE '1%') AND (CENTRAL.fechan > '20090524')
  7. GROUP BY ACMSUB.CSID, ACMSUB.CLIENTES, evento.Evento, evento.Detalle
  8.  
  9. HAVING  (COUNT(evento.Evento) > 1) AND (COUNT(DISTINCT CONVERT(VARCHAR(10), CENTRAL.fechan, 121)) > 1)
  10.  
  11. ORDER BY ACMSUB.CSID   



Con esta consulta puedo saber cuantas alarmas hubo donde un cliente y ademas cuantos dias tiene haciendolo.


Trate de hacerla asi puesta en delphi con firebird [glow=red,2,300]Nota: inicio es el valor de un datetimepicker[/glow]:


delphi
  1.   DMmantenimiento.ZQinformes.close;
  2.   DMmantenimiento.ZQinformes.SQL.Clear;
  3.   DMmantenimiento.ZQinformes.SQL.ADD(' select acmsub.csid, acmsub.clientes, count(evento.tipo) as    disparos,EVENTO.EVENTO, evento.detalle,count(distinct(central.fechan))as diasdisparos,
  4.   DIRECCION,DIRCOM,TELEFONO,NOTACOM');
  5.   DMmantenimiento.ZQinformes.SQL.ADD(' from central inner join acmsub on central.csid =acmsub.csid inner join evento on central.evento=evento.evento');
  6.   DMmantenimiento.ZQinformes.SQL.ADD(' where (evento.evento like' + QUOTEDSTR('BA%')+'or EVENTO.evento LIKE' +QUOTEDSTR('1%')+')');
  7.   DMmantenimiento.ZQinformes.SQL.ADD(' AND CENTRAL.FECHAN > ' + quotedstr(inicio));
  8.   DMmantenimiento.ZQinformes.SQL.ADD(' group BY ACMSUB.csid, ACMSUB.clientes, EVENTO.EVENTO,EVENTO.detalle,DIRECCION,DIRCOM,TELEFONO,NOTACOM');
  9.   DMmantenimiento.ZQinformes.SQL.ADD(' having (COUNT(EVENTO.TIPO)> 1) AND (COUNT(DISTINCT FECHAN) > 1)');
  10.   DMmantenimiento.ZQinformes.SQL.ADD(' ORDER BY ACMSUB.CSID ');
  11.   DMmantenimiento.ZQinformes.Open;     




El problema esta en el conteo  de DIASDISPAROS, me da el mismo numero que el conteo de DISPAROS aunque no sea asi.

La idea es que si la alarma de una casa sono:

fecha            Hora              evento     
10/09/2009    11:00Am        Robo zona 1
10/09/2009    04:05PM        Robo zona 1
11/09/2009    06:00PM        Robo zona 1
12/09/2009    09:00PM        Robo zona 1

La consulta deberia decir que la zona 1 se disparo  4 veces  en 3 dias diferentes

y ahora me esta dando el mismo numero, pero con la version de arriba que la usaba en sql 2000, si me funciona bien, asi que el problema esta en el conteo de la fecha

Espero haberme explicado bien.

Espero sus opiniones, gracias de antemano.








  • 0

#2 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 17 septiembre 2009 - 10:43



sql
  1. COUNT (DISTINCT EXTRACT (DAY FROM central.fechan)) 



Con esto quedo resuelto, cambiandolo en el select y en el having

No me dijeron nada, pero gracias...!!!
  • 0

#3 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 17 septiembre 2009 - 10:47



sql
  1. COUNT (DISTINCT EXTRACT (DAY FROM central.fechan)) 



Con esto quedo resuelto, cambiandolo en el select y en el having

No me dijeron nada, pero gracias...!!!


GFracias por compartirnos la solución.

Saludos


  • 0




IP.Board spam blocked by CleanTalk.