Re: ¿Hay forma de contar números de fin de semana y operaciones de fecha en consultas Cita:
Iniciado por programadornet 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
|