PDA

Ver la Versión Completa : Contar registros por fecha


lucho1981
20-11-2013, 13:51:16
Muy buenas amigos. Después de tanto tiempo, vuelvo por estos lados.
Tengo una db en mysql 5 con delphi 7.
En una tabla tengo un campo fecha (año, mes día) y desde delphi necesito hacer una consulta en la que me cuente la cantidad de registros que hay en un mes y año determinado.
El usuario seleccionara el mes (de 1 a 12) y el año (2012, 2013....etc) y necesito que me muestre la cantidad de registros que hay en un mes en particular.
Mi idea (no se si errada) es:

var
contador: integer;
begin
cantidad:=0;
dm.tarea.first;
while not dm.tarea.eof do
begin
//aca es donde no tengo en claro como comparar las fechas con mi mes y año. Seguramente será con un if donde irá incrementando mi contador, pero no se como hacerlo.
end;
end;


Muchas gracias por su ayuda.

Casimiro Notevi
20-11-2013, 14:13:36
Usa sql, algo similar a esto:
Ejemplo, mes 11:
select count(*) from tabla where extract(month from fecha)= 11

TOPX
20-11-2013, 14:13:50
Buenas.

Mi idea es, que en la propiedad que tiene la sentencia sql de dm.tarea diga algo como:
SELECT COUNT(*) as cantidad
FROM tabla
WHERE YEAR(fecha) = :anio_fecha
AND MONTH(fecha) = :mes_fecha
Y luego, en Delphi asigna asigna los valores para los parámetros anio_fecha y mes_fecha.
-

lucho1981
20-11-2013, 14:45:18
Gracias por sus comentarios.
Intenté hacer como me dijo TOPX y pasar por parámetros mes y año.

Me dió este error:
Project mantenimiento.exe raised exception class EZSQLException with message 'SQL Error: You have an error in your SQL syntax; check de manual that corresponds to your MySQL server version for the right syntax to use near '*) as cantidad FROM tarea WHERE YEAR (fecha)=2013 AND MONTH(fecha)=11' at line 1'. Proecess stopped. Use Step or Run to continue.


Con esta consulta me devolvería por parámetros el resultado o como lo tomo nuevamente en delphi (supongamos que quiero asignarlo a una variable).

lucho1981
20-11-2013, 14:50:30
El error era únicamente un espacio demás.
Ahora la pregunta es, como hago para tomar el resultado de la consulta y asignarlo a una variable??

Muchas gracias

ecfisa
20-11-2013, 15:23:47
Hola lucho1981.

Un ejemplo para la consulta anterior:

...
var
Cantidad: Integer;
begin
with TuQuery do
begin
Close;
SQL.Clear;
SQL.Add('SELECT COUNT(*) AS CANTIDAD FROM TABLA')
SQL.Add('WHERE YEAR(FECHA) = :ANIO_FECHA');
SQL.Add('AND MONTH(FECHA) = :MES_FECHA');
Open;
Cantidad := FieldByName('CANTIDAD').AsInteger;
end;
...


Saludos :)

lucho1981
20-11-2013, 15:39:44
Muchas gracias. Me sirvió a la perfección.^\||/

Hola lucho1981.

Un ejemplo para la consulta anterior:

...
var
Cantidad: Integer;
begin
with TuQuery do
begin
Close;
SQL.Clear;
SQL.Add('SELECT COUNT(*) AS CANTIDAD FROM TABLA')
SQL.Add('WHERE YEAR(FECHA) = :ANIO_FECHA');
SQL.Add('AND MONTH(FECHA) = :MES_FECHA');
Open;
Cantidad := FieldByName('CANTIDAD').AsInteger;
end;
...


Saludos :)

lucho1981
28-11-2013, 15:20:41
Amigos tengo una consulta que para mi puede ser parecida (es por ello que no inicio un nuevo hilo)
Tengo una tabla en mysql, la que tiene un campo time (hh:mm:ss), necesito sumar todos los campos de una determinada fecha.
Mi consulta es la siguiente

SELECT SUM(*) as TOTAL
FROM TAREA
WHERE YEAR (fecha) = :anio
AND MONTH (fecha) = :mes


Luego de leer un poco vi que SUM es solo para valores enteros.
Como puedo hacer para sumar dicho campo?

lucho1981
28-11-2013, 16:02:49
Luego de leer un poco mas, efectivamente la función SUM de Mysql no suma valores Time.
Lo que hice fue convertir todo a segundos, sumar, y convertir a time otra vez.

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(hs_previstas))) as TOTAL
FROM tarea
WHERE YEAR(fecha)= :anio
AND MONTH(fecha)= : mes


Todo anduvo perfecto.