Hola,Buenas noches.
Tengo un problema a la hora de realizar una consulta con una condición por meses.
¿Alguien sabría decirme que tipo de condición hacer?
Ejemplo 1: Consulta total de registros por mes
Ejemplo 2: Consulta total de registros entre 2 fechas
Saludos
WTF!... Algo así?
SELECT COUNT(*) FROM tblUsuario
WHERE(strFecha = '01/02/2010') AND (strFecha = '28/02/2010')
+
group by, porque entiendo quieres sacar la cantidad de registros agrupados por mes, aunque tal vez me equivoque :P
Saludos
Parece que no soy la unica :xD
No entiendo bien tu peticion tampoco...
Es algo como saber cuantos registros existen por cada mes en los 12 meses???? y imprimir algo como:
ENERO: 200 registros
FEBRERO: 300 registros
MARZO: 150 registros
ect....
Y eso de total de registros por 2 fechas? Seria como:
ENERO + FEBRERO : 500 registros...
Si tu peticion es mas o menos eso.. probablemente tenga que apoyarme en el uso de un poquito de PL y cursores :rolleyes: o a lo mejor no, dependera de tu explicacion de que requieres...
La DB es Oracle verdad?
Cita de: ^TiFa^ en 4 Marzo 2010, 21:35 PM
Parece que no soy la unica :xD
No entiendo bien tu peticion tampoco...
Es algo como saber cuantos registros existen por cada mes en los 12 meses???? y imprimir algo como:
ENERO: 200 registros
FEBRERO: 300 registros
MARZO: 150 registros
ect....
Y eso de total de registros por 2 fechas? Seria como:
ENERO + FEBRERO : 500 registros...
Si tu peticion es mas o menos eso.. probablemente tenga que apoyarme en el uso de un poquito de PL y cursores :rolleyes:
La DB es Oracle verdad?
Si ,Tifa esa es mi petición ;D Y la BD es Oracle también :)
CitarInsertar Cita
WTF!... Algo así?
Código
SELECT COUNT(*) FROM tblUsuario
WHERE(strFecha = '01/02/2010') AND (strFecha = '28/02/2010')
No me ha funcionado...no me devuelve ningún registro.
Pero gracias de todas formas ;)
ehm... la condicion no va en WHERE, es BETWEEN
SELECT COUNT(*) FROM tblUsuario WHERE strFecha BETWEEN '01/02/2010' AND '28/02/2010'
pd: por favor gente acostumbrense a usar [code=sql][/code] al rededor de su codigo :¬¬
Cita de: Nakp en 4 Marzo 2010, 21:55 PM
ehm... la condicion no va en WHERE, es BETWEEN
SELECT COUNT(*) FROM tblUsuario WHERE strFecha BETWEEN '01/02/2010' AND '28/02/2010'
pd: por favor gente acostumbrense a usar [code=sql][/code] al rededor de su codigo :¬¬
Sorry por lo del código.
En cuanto a la modificación de la sentencia anterior...si tengo la fecha en Date..con "TO CHAR" valdría igual no?
Me sigue sin funcionar,ahora me dice que falta una expresión...
BETWEEN (CABFACTURA.FECHA='01/02/10') and (CABFACTURA.FECHA='28/02/10')
ah? xD
mira... hablado :P
DONDE campo ENTRE valor1 Y valor2
SELECT COUNT(*) FROM tabla WHEReM5CABFACTURA.FECHA BETWEEN '01/02/10' AND '28/02/10'
estas seguro que la fecha esta bien? el formato... yo las uso YYYYMMDD o DD-MM-YYYY o DD/MM/YY pero nunca XX/XX/XX
ahora si,pero...¿sabes como coger el mes de las fechas? :)
Saludos
no se si en oracle pero prueba MONTH('fecha')
aunque no creo que sirva porque que hay entre octubre y marzo (2009-2010) es mas logico definir las fechas completas :P
Ok.
Muchas gracias por todo. ;-)
Saludos
Si te inclinas por crear un procedimiento con lo siguiente como contenido... podria servirte :rolleyes: Donde la fecha puede pasar como parametro.
SQL> select * from ejemplo;
FECHA SALARIO
--------- ----------
20-JAN-09 23000
15-JAN-09 14000
28-FEB-09 20000
15-FEB-08 20000
13-JAN-08 25000
27-DEC-09 20000
16-DEC-09 25000
10-DEC-09 18000
8 rows selected.
SQL> DECLARE
2 SUMA INTEGER;
3 BEGIN
4 FOR a IN 0..12
5 LOOP
6 SELECT COUNT(SALARIO) INTO SUMA FROM EJEMPLO WHERE FECHA > '31-DEC-08' AND SUBSTR((TO_CHAR(FECHA, 'DD/MM/YY')), 4, 2) = a;
7 DBMS_OUTPUT.PUT_LINE('El mes :: '||a||' Tiene '||suma||' Registros');
8 END LOOP;
9 END;
10 /
El mes :: 0 Tiene 0 Registros
El mes :: 1 Tiene 2 Registros
El mes :: 2 Tiene 1 Registros
El mes :: 3 Tiene 0 Registros
El mes :: 4 Tiene 0 Registros
El mes :: 5 Tiene 0 Registros
El mes :: 6 Tiene 0 Registros
El mes :: 7 Tiene 0 Registros
El mes :: 8 Tiene 0 Registros
El mes :: 9 Tiene 0 Registros
El mes :: 10 Tiene 0 Registros
El mes :: 11 Tiene 0 Registros
El mes :: 12 Tiene 3 Registros
PL/SQL procedure successfully completed.
Tenia tiempo que no tocaba PL/SQL
Cita de: ^TiFa^ en 5 Marzo 2010, 01:39 AM
Si te inclinas por crear un procedimiento con lo siguiente como contenido... podria servirte :rolleyes: Donde la fecha puede pasar como parametro.
SQL> select * from ejemplo;
FECHA SALARIO
--------- ----------
20-JAN-09 23000
15-JAN-09 14000
28-FEB-09 20000
15-FEB-08 20000
13-JAN-08 25000
27-DEC-09 20000
16-DEC-09 25000
10-DEC-09 18000
8 rows selected.
SQL> DECLARE
2 SUMA INTEGER;
3 BEGIN
4 FOR a IN 0..12
5 LOOP
6 SELECT COUNT(SALARIO) INTO SUMA FROM EJEMPLO WHERE FECHA > '31-DEC-08' AND SUBSTR((TO_CHAR(FECHA, 'DD/MM/YY')), 4, 2) = a;
7 DBMS_OUTPUT.PUT_LINE('El mes :: '||a||' Tiene '||suma||' Registros');
8 END LOOP;
9 END;
10 /
El mes :: 0 Tiene 0 Registros
El mes :: 1 Tiene 2 Registros
El mes :: 2 Tiene 1 Registros
El mes :: 3 Tiene 0 Registros
El mes :: 4 Tiene 0 Registros
El mes :: 5 Tiene 0 Registros
El mes :: 6 Tiene 0 Registros
El mes :: 7 Tiene 0 Registros
El mes :: 8 Tiene 0 Registros
El mes :: 9 Tiene 0 Registros
El mes :: 10 Tiene 0 Registros
El mes :: 11 Tiene 0 Registros
El mes :: 12 Tiene 3 Registros
PL/SQL procedure successfully completed.
Tenia tiempo que no tocaba PL/SQL
Muchas gracias Tifa te lo has currado ;-) pero necesito que sea SQL ya que PL/SQL no lo hemos tocado en clase. :(
Pues puro SQL
SELECT COUNT(SALARIO) INTO SUMA FROM EJEMPLO WHERE FECHA > '31-DEC-08' AND SUBSTR((TO_CHAR(FECHA, 'DD/MM/YY')), 4, 2) = a;
Cita de: ^TiFa^ en 5 Marzo 2010, 13:22 PM
Pues puro SQL
SELECT COUNT(SALARIO) INTO SUMA FROM EJEMPLO WHERE FECHA > '31-DEC-08' AND SUBSTR((TO_CHAR(FECHA, 'DD/MM/YY')), 4, 2) = a;
Nuca había utilizado "SUBSTR"..mmm lo probaré :-\
Gracias Saludos ;D
Bueno en el caso que expuse, utilize SUBSTR por la siguiente razon:
(TO_CHAR(FECHA, 'DD/MM/YY'))
Eso bien sabes retorna la fecha como '00/00/0000' en vez de '00-MES-00'
Y utilizo SUBSTR para que empieze a contarme en el caracter numero 4 hacia la derecha, y me cuente solo 2 posiciones.. 4 y 5 que corresponde al mes. Fijate:
25/02/2009
Donde:
25 : Es el dia del mes, corresponde a 2 caracteres que son caracter 1 = 2 y caracter 2 = 5
/ : Barra de separacion de la fecha corresponde al caracter numero 3
02 : Mes correspondiente del año, donde el 0 = 4 caracter y el 2 = 5 caracter.
Como solo requiero en mi caso, el mes del año del que se habla, solo tomo 2 caracteres a partir del 4 caracter leido ;) (Por eso uso SUBSTR)
SUBSTR((TO_CHAR(FECHA, 'DD/MM/YY')), 4, 2) = a;
El resultado final de SUBSTR((TO_CHAR(FECHA, 'DD/MM/YY')), 4, 2) es 02 que corresponde a Febrero, = a 'a' es una variable que contiene un valor entero, en tu caso puedes sustituir a 'a' por un numero entero del mes, en este caso si coloco en su lugar 02 y existen registros en la tabla del mes FEBRERO se contaran todos y se retornara al finalize que para el mes 2 (FEBRERO) existen X cantidad de registros...
Un saludo ;)
Ok. ;-)
Muchas gracias Tifa :)
Saludos