Ver Mensaje Individual
  #5 (permalink)  
Antiguo 22/02/2008, 08:24
MarioHeredia
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 17 años, 1 mes
Puntos: 3
Re: ¿Hay forma de contar números de fin de semana y operaciones de fecha en consultas

Cita:
Iniciado por programadornet Ver Mensaje
Así:

...contar el número de días de fin de semana.
Ok, todavia no me quedo muy claro que quieres decir con la leyenda que cito, pero vamos a hacer el intento.

Supongamos una situacion... Un grupo de Ingenieros estan en el Congo Belga hace ya mucho tiempo y estan soportando temperaturas muy bajas, entonces los muchachos quieren saber hace cuantas semanas que se estan muriendo de frio.

Ok, preparemos los datos.

Código:
DROP TABLE PROGRAM_NET PURGE;

CREATE TABLE PROGRAM_NET
(
  FECHA         DATE,
  CODIGO_CIUDAD VARCHAR2(15),
  TEMPERATURA   NUMBER
) TABLESPACE AUXILIAR PCTFREE 5 PCTUSED 95;

INSERT INTO PROGRAM_NET VALUES (TO_DATE('01.01.2008','DD.MM.YYYY'), 'Congo Belga', 3.39); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('02.01.2008','DD.MM.YYYY'), 'Congo Belga', 11.01); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('03.01.2008','DD.MM.YYYY'), 'Congo Belga', 11.67); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('04.01.2008','DD.MM.YYYY'), 'Congo Belga', 13.22); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('05.01.2008','DD.MM.YYYY'), 'Congo Belga', 6.73); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('06.01.2008','DD.MM.YYYY'), 'Congo Belga', 5.33); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('07.01.2008','DD.MM.YYYY'), 'Congo Belga', 11.08); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('08.01.2008','DD.MM.YYYY'), 'Congo Belga', 11.2); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('09.01.2008','DD.MM.YYYY'), 'Congo Belga', 10.67); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('10.01.2008','DD.MM.YYYY'), 'Congo Belga', 11.2); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('11.01.2008','DD.MM.YYYY'), 'Congo Belga', 1.18); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('12.01.2008','DD.MM.YYYY'), 'Congo Belga', 0); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('13.01.2008','DD.MM.YYYY'), 'Congo Belga', 0); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('14.01.2008','DD.MM.YYYY'), 'Congo Belga', 6.64); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('15.01.2008','DD.MM.YYYY'), 'Congo Belga', 11.96); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('16.01.2008','DD.MM.YYYY'), 'Congo Belga', .02); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('17.01.2008','DD.MM.YYYY'), 'Congo Belga', 4.73); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('18.01.2008','DD.MM.YYYY'), 'Congo Belga', 11.07); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('19.01.2008','DD.MM.YYYY'), 'Congo Belga', 6.19); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('20.01.2008','DD.MM.YYYY'), 'Congo Belga', 5.01); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('21.01.2008','DD.MM.YYYY'), 'Congo Belga', 8.98); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('22.01.2008','DD.MM.YYYY'), 'Congo Belga', 8.67); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('23.01.2008','DD.MM.YYYY'), 'Congo Belga', 9.06); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('24.01.2008','DD.MM.YYYY'), 'Congo Belga', 9); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('25.01.2008','DD.MM.YYYY'), 'Congo Belga', 9.95); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('26.01.2008','DD.MM.YYYY'), 'Congo Belga', 6.25); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('27.01.2008','DD.MM.YYYY'), 'Congo Belga', 4.96); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('28.01.2008','DD.MM.YYYY'), 'Congo Belga', 9.02); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('29.01.2008','DD.MM.YYYY'), 'Congo Belga', 8.96); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('30.01.2008','DD.MM.YYYY'), 'Congo Belga', 9.66); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('31.01.2008','DD.MM.YYYY'), 'Congo Belga', 10.32); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('01.02.2008','DD.MM.YYYY'), 'Congo Belga', 12.83); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('02.02.2008','DD.MM.YYYY'), 'Congo Belga', 7.17); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('03.02.2008','DD.MM.YYYY'), 'Congo Belga', 5.03); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('04.02.2008','DD.MM.YYYY'), 'Congo Belga', 10.5); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('05.02.2008','DD.MM.YYYY'), 'Congo Belga', 9.88); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('06.02.2008','DD.MM.YYYY'), 'Congo Belga', 9.81); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('07.02.2008','DD.MM.YYYY'), 'Congo Belga', 10.72); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('08.02.2008','DD.MM.YYYY'), 'Congo Belga', 15.7); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('09.02.2008','DD.MM.YYYY'), 'Congo Belga', 6.93); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('10.02.2008','DD.MM.YYYY'), 'Congo Belga', 5.29); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('11.02.2008','DD.MM.YYYY'), 'Congo Belga', 10.08); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('12.02.2008','DD.MM.YYYY'), 'Congo Belga', 9.71); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('13.02.2008','DD.MM.YYYY'), 'Congo Belga', 9.84); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('14.02.2008','DD.MM.YYYY'), 'Congo Belga', 10.1); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('15.02.2008','DD.MM.YYYY'), 'Congo Belga', 13.03); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('16.02.2008','DD.MM.YYYY'), 'Congo Belga', 7.07); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('17.02.2008','DD.MM.YYYY'), 'Congo Belga', 5.01); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('18.02.2008','DD.MM.YYYY'), 'Congo Belga', 9.98); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('19.02.2008','DD.MM.YYYY'), 'Congo Belga', 9.9); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('20.02.2008','DD.MM.YYYY'), 'Congo Belga', 9.73); 
INSERT INTO PROGRAM_NET VALUES (TO_DATE('21.02.2008','DD.MM.YYYY'), 'Congo Belga', 10.54); 

COMMIT;


DROP TABLE FECHA_PROGRAM_NET PURGE;

CREATE TABLE FECHA_PROGRAM_NET TABLESPACE AUXILIAR PCTFREE 5 PCTUSED 95 AS
SELECT TO_DATE('&1','DD.MM.YYYY') FECHA FROM DUAL;
Y nuestro select, cuenta la cantidad de fines de semana desde una fecha determinada hasta hoy.

Código:
SELECT SUM(FIN_DE_SEMANA) FINES_DE_SEMANAS,
       CODIGO_CIUDAD,
       ROUND(AVG(TEMPERATURA), 2) TEMPERATURA_PROMEDIO
  FROM (
SELECT FECHA,
       DECODE(FECHA, TRUNC(FECHA,'DAY'), 1, 0) FIN_DE_SEMANA,
       CODIGO_CIUDAD,
       TEMPERATURA FROM PROGRAM_NET
       ) A,
       FECHA_PROGRAM_NET F
 WHERE A.FECHA > F.FECHA 
 GROUP BY CODIGO_CIUDAD;
Espero que esto te ayude, cualquier cambio lo hacemos en base a este conjunto de datos.

Saludos, Mario.

Última edición por MarioHeredia; 22/02/2008 a las 08:25 Razón: Se trabajo con PL/SQL 7