Ayuda de consulta

23/12/2003 - 11:04 por Miguel | Informe spam
Hola a todos y feliz navidad!
tengo q hacer una consulta q haga lo siguiente, a ver: en una tabla todos
los dias se introducen las jornadas de los trabajadores, y uno de estos
datos es la fecha en q acaba la jornada (imagino q por los nocturnos o así).
Ese datos es de tipo varchar(8) q lo meten como dd/mm/yy (creo q hubiera
sido mejor poner un smalldatetime pero bueno). Ese dato tiene null para los
trabajos aun en activo.
Queremos recuperar todos aquellos trabajadores (dato trabajador de la tabla)
cuya última fecha de fin de jornada es de antes del 1/12/03. Y queremos
recuperar esa última fecha tb.
Bien, la consulta que hice en un principio fue:

select conductor, max(convert(datetime,fechafin,3)) as ultima_fecha_fin
from trabajo
where convert(datetime,isnull(fechafin, '31/12/03'),3)<'2003-12-01'
group by conductor

con eso pretendo coger, entre los q tengan la fecha menor del 01/12/2003, q
me coja la ultima. A los q tengan null, como no quiero q me los coja, les
pongo una fecha posterior a la interesada.
La cuestión es q no quiero q me devuelva los q tengan trabajos posteriores
al 01/12/2003, y claro, de estos me devuelve de noviembre (según la consulta
totalmente legítimo pq es anterior a la fecha indicada).
¿Cómo puedo hacer para q SOLO me coja los q tiene la última fechafin
anterior al 01/12/2003 y q no tengan null ese valor?
Espero haberme explicado
Muchas gracias por todo
Un saludo

Preguntas similare

Leer las respuestas

#6 Miguel
23/12/2003 - 16:17 | Informe spam
Más o menos es así. Lo q sucede es q en esa tabla se les añade un registro
cada vez q entran a trabajar, luego todos los q están a null es q han
entrado y aún no han salido. Cierto es q puede haber gente de baja, durante
algo más de un mes (hace poco ha sucedido) o así. Ahora deben enviar un
listado con los trabajadores actuales, y la aplicación q les gestiona ahora
el sistema no tiene esa opción (precisamente he de encargarme yo de
desarrollar uno nuevo... hay pa rato...) y han de hacerlo 'a mano'. Por eso
quieres esos datos q luejo los comprobarán con los datos reales, pero así
tienen ya una base para trabajar.

Más o menos sería eso. La select q envié antes parece q funcionó, pero me
apuesto las barbas q se puede optimizar muchísimo, por eso la subí...
Muchas gracias por la ayuda
Respuesta Responder a este mensaje
#7 Miguel
23/12/2003 - 16:22 | Informe spam
Hola!
pues esa consulta me lo saca tb bien!!! Muchas gracias, mucho mejor q la q
yo hice.
Una pregunta, la sentencia case es más eficiente q la isnull? Es q otras
veces tb me desaconsejaron usar isnull y no sé muy bien pq.
Muchas gracias
Un saludo!!!
Respuesta Responder a este mensaje
#8 Maximiliano Damian Accotto
23/12/2003 - 16:26 | Informe spam
para Miguel!!, pro vos tenes un registro diario no? o sea ej:

legajo Fechai Fechao
10 01/11/2003 8:00:00 1/11/2003 18:00:00
10 02/11/2003 8:00:00 null

es mas o menos asi? y vos queres saber cuales no tienen registros a partir
de una fecha, suponete q lo sacaron y este mismo legajo no tiene mas
registros a partir del 5/11.

Por lo cual vos queres hacer una consulta que no te de cuales no tienen
registros sino cual es la ultima fecha de registro por legajo?

por que

10 sera 02/11/2003 no? al tener null no ha salido no?

la verdad que sin ejemplos es mas dificil interpretarte pero le buscaremos
la vuelta, yo estoy implementando un sistema en SQL para control de reloj,
si te interesa lo hablamos por el MUG y te puedo hacer algunas
recomendaciones en la ingenieria del mismo.

Salu2


##NO_SPAM#> escribió en el mensaje
news:
Más o menos es así. Lo q sucede es q en esa tabla se les añade un registro
cada vez q entran a trabajar, luego todos los q están a null es q han
entrado y aún no han salido. Cierto es q puede haber gente de baja,


durante
algo más de un mes (hace poco ha sucedido) o así. Ahora deben enviar un
listado con los trabajadores actuales, y la aplicación q les gestiona


ahora
el sistema no tiene esa opción (precisamente he de encargarme yo de
desarrollar uno nuevo... hay pa rato...) y han de hacerlo 'a mano'. Por


eso
quieres esos datos q luejo los comprobarán con los datos reales, pero así
tienen ya una base para trabajar.

Más o menos sería eso. La select q envié antes parece q funcionó, pero me
apuesto las barbas q se puede optimizar muchísimo, por eso la subí...
Muchas gracias por la ayuda


Respuesta Responder a este mensaje
#9 Miguel
23/12/2003 - 16:55 | Informe spam
Uf como se lía la cosa...
Quizás explicando algo más la situación se aclare algo. A ver: la empresa es
de servicios de ambulancias, y el inicio y fin de jornada se marca desde el
departamento de coordinacion.
Cuando un trabajador entra se introduce en la tabla (suponiendo el conductor
10 y la estructura de la tabla):
Fecha Conductor Inicio Fin FechaFin
= == == = ==#/12/03 10 23:00 null null

La fecha supongo q es cuando entra, es datetime. Inicio y fin la hora de
entrada y salida, varchar(5), y fechafin la fecha de la salida, varchar(8).
Cuando entra el conductor, llama a la base y le apuntan q ha entrado. Así,
el conductor 10 entra el 23/12 a las 23. Cuando acaba la jornada, por lo q
sea, se llama a base y se marca:

Fecha Conductor Inicio Fin FechaFin
= == == = ==#/12/03 10 23:00 07:00 24/12/03

Es un ejemplo de un nocturno, razón por la q imagino q metieron el campo
fechafin.
¿pq es así? bueno, no lo sé, yo entré a los 2 años de estar así fncionando.
Cuando compraron el sistema estaba, digamos, no muy rodado, y preparado para
empresas pequeñas, por lo q a la mía se le quedó chico enseguida. Le fueron
pidieron a la casa más cosas, pero eran parches sobre parches, y quedó así,
con muchos huecos y muchas cosas no del todo bien hechas.
Claro, si un trabajador entra y sale lo han de marcar. ¿q pasa si se les
olvida en coordinacion o pasa algo? Pues... q el muchacho se llevará un
alegrón cuando en la nómina vea q tiene tropecientas horas extras... bueno,
eso se comprueba antes, pero no lo veo óptimo.

En el ejemplo q pones tú, claro, el conductor tiene como fecha entrada
02/11/2003 y, al no marcarle la salida, aun está trabajando...
Quizás ahora lo haya explicado algo mejor... Pero me temo q esté dando una
chapa impresionante, lo siento si es así. Sé q no es el sistema más óptimo,
a ello se debe q esté yo aquí desarrollando uno nuevo, y bueno es q se le
saquen las faltas al viejo pata no cometer yo los mismos errores.

si quieres hablarlo en el mug adelante, luego pondría aquí un resumen del
mismo por si le puede servir a alguien.

Muchas gracias por su ayuda
Un saludo!
Respuesta Responder a este mensaje
#10 Maximiliano Damian Accotto
23/12/2003 - 17:18 | Informe spam
Perfecto!! es lo q me imagine y la consulta de Liliana es correcta, luego si
queres te explico como lo hicimos nosotros, porque por ej no solo tenemos
eso sino turnos rotativos como 4x4,6x2, etc.
Si queres lo hablamos y haces un resumen por si a alguno le es util de
verdad.

Salu2

Maximiliano Damian Accotto
"Miguel" <#NO_SPAM##NO_SPAM#> escribió en el mensaje
news:eCq$
Uf como se lía la cosa...
Quizás explicando algo más la situación se aclare algo. A ver: la empresa


es
de servicios de ambulancias, y el inicio y fin de jornada se marca desde


el
departamento de coordinacion.
Cuando un trabajador entra se introduce en la tabla (suponiendo el


conductor
10 y la estructura de la tabla):
Fecha Conductor Inicio Fin FechaFin
= == == = > 23/12/03 10 23:00 null null

La fecha supongo q es cuando entra, es datetime. Inicio y fin la hora de
entrada y salida, varchar(5), y fechafin la fecha de la salida,


varchar(8).
Cuando entra el conductor, llama a la base y le apuntan q ha entrado. Así,
el conductor 10 entra el 23/12 a las 23. Cuando acaba la jornada, por lo q
sea, se llama a base y se marca:

Fecha Conductor Inicio Fin FechaFin
= == == = > 23/12/03 10 23:00 07:00 24/12/03

Es un ejemplo de un nocturno, razón por la q imagino q metieron el campo
fechafin.
¿pq es así? bueno, no lo sé, yo entré a los 2 años de estar así


fncionando.
Cuando compraron el sistema estaba, digamos, no muy rodado, y preparado


para
empresas pequeñas, por lo q a la mía se le quedó chico enseguida. Le


fueron
pidieron a la casa más cosas, pero eran parches sobre parches, y quedó


así,
con muchos huecos y muchas cosas no del todo bien hechas.
Claro, si un trabajador entra y sale lo han de marcar. ¿q pasa si se les
olvida en coordinacion o pasa algo? Pues... q el muchacho se llevará un
alegrón cuando en la nómina vea q tiene tropecientas horas extras...


bueno,
eso se comprueba antes, pero no lo veo óptimo.

En el ejemplo q pones tú, claro, el conductor tiene como fecha entrada
02/11/2003 y, al no marcarle la salida, aun está trabajando...
Quizás ahora lo haya explicado algo mejor... Pero me temo q esté dando una
chapa impresionante, lo siento si es así. Sé q no es el sistema más


óptimo,
a ello se debe q esté yo aquí desarrollando uno nuevo, y bueno es q se le
saquen las faltas al viejo pata no cometer yo los mismos errores.

si quieres hablarlo en el mug adelante, luego pondría aquí un resumen del
mismo por si le puede servir a alguien.

Muchas gracias por su ayuda
Un saludo!


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida