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

#1 Miguel
23/12/2003 - 12:10 | Informe spam
Bueno
con esta consulta creo q lo hace pero seguro q es una barbaridad, aún así la
dejo por si a alguien le puede ser útil o le quiere dar un repaso.

select conductor, max(convert(datetime,isnull(fechafin, '31/12/03'),3)) as
ultima_fecha_fin
from trabajo
where convert(datetime,isnull(fechafin, '31/12/03'),3)<'2003-12-01'
and conductor not in(select conductor from trabajo where fechafin is null or
convert(datetime,isnull(fechafin, '31/12/03'),3)>'2003-12-01')
group by conductor

muchas gracias por su ayuda
un saludo
Respuesta Responder a este mensaje
#2 Maximiliano Damian Accotto
23/12/2003 - 15:26 | Informe spam
a ver si te entendi, los nulos lo los traemos verdad? de ser asi me parece
que el isnull y el < es mucho, porque por ej podrias hacer esto:

select conductor, max(convert(datetime,fechafin,3)) as ultima_fecha_fin
from trabajo
where FECHAFIN IS NOT NULL AND
convert(datetime,fechafin,3)<'2003-12-01'
group by conductor

deberia ser algo asi, si entendi la consigna no jeje sino decime y lo vemos

Salu2
Maximiliano Damian Accotto
"Miguel" <#NO_SPAM##NO_SPAM#> escribió en el mensaje
news:
Bueno
con esta consulta creo q lo hace pero seguro q es una barbaridad, aún así


la
dejo por si a alguien le puede ser útil o le quiere dar un repaso.

select conductor, max(convert(datetime,isnull(fechafin, '31/12/03'),3)) as
ultima_fecha_fin
from trabajo
where convert(datetime,isnull(fechafin, '31/12/03'),3)<'2003-12-01'
and conductor not in(select conductor from trabajo where fechafin is null


or
convert(datetime,isnull(fechafin, '31/12/03'),3)>'2003-12-01')
group by conductor

muchas gracias por su ayuda
un saludo


Respuesta Responder a este mensaje
#3 Miguel
23/12/2003 - 15:47 | Informe spam
Hola! muchas gracias por responder!!
La verdad es q algo lioso... a mi me lo han tenido q repetir 2 veces para q
me enterara bien.
Esa tabla por cada día de trabajo y trabajador tiene un registro, con su
fecha de fin. Los q tengan esa fecha a null es q estan trabajando. Lo q
queremos son los trabajadores q ya no trabajan en la empresa, y son aquellos
que no tienen ninguna fecha de fin después del 01/12/03, de ahí la consulta.
Por lo tanto los q tienen null, como trabajan hoy, tampoco queremos que los
devuelva.
La consulta q me has pasado tb la probé, y la desheché pq me devuelve
aquellos q tienen null a hoy. Eso sí de estos me devuelve la última fecha de
fin anterior del 01/12/03, pero como tb posteriores no me sirve. Lo q hace
es de cada uno, aunq tenga más allá del 01/12/03 me coge todas las
anteriores, y de ellas la más alta (por el max), y por eso no me sirve (lo
acabo de volver a probar por si acaso). De todos modos muchas gracias :)
Por cierto Maximiliano, ¿estás tb en la lista de sql server del mug? Pq sino
creo q tienes un hermano gemelo virtual :)... Estás en todas, q máquina...
Enhorabuena y sigue así campeón!
Un saludo y feliz navidad
Respuesta Responder a este mensaje
#4 Liliana Sorrentino
23/12/2003 - 15:48 | Informe spam
Hola Miguel,
si entendí bien, y sin datos para probar, creo que esto te servirá.
Saludos.. Liliana.

SELECT conductor, MAX(fechafin)
FROM trabajo
GROUP BY conductor
HAVING MAX(CONVERT(DATETIME, CASE WHEN fechafin IS NULL THEN '01/12/03' ELSE
fechafin END)) < '20031201'


"Miguel" <#NO_SPAM##NO_SPAM#> escribió en el mensaje
news:
Bueno
con esta consulta creo q lo hace pero seguro q es una barbaridad, aún así


la
dejo por si a alguien le puede ser útil o le quiere dar un repaso.

select conductor, max(convert(datetime,isnull(fechafin, '31/12/03'),3)) as
ultima_fecha_fin
from trabajo
where convert(datetime,isnull(fechafin, '31/12/03'),3)<'2003-12-01'
and conductor not in(select conductor from trabajo where fechafin is null


or
convert(datetime,isnull(fechafin, '31/12/03'),3)>'2003-12-01')
group by conductor

muchas gracias por su ayuda
un saludo


Respuesta Responder a este mensaje
#5 Maximiliano Damian Accotto
23/12/2003 - 15:57 | Informe spam
jeje soy el mismo del mug , digamos que estoy en varios foros al mismo
tiempo, pero vayamos a tu tema.

Por cada dia tenes un registro que Empleado,fecha_i,fecha_o si?

digamos que es la entrada del personal a planta si? eso es lo mas probable,
bien ahora los que estan en null en la salida es porque no han fichado por
lo cual estan en planta si?

ahora vos necesitas saber todos los empleados que no tengas transacciones a
partir de una fecha? por ej 1/12/2003, los que no tienen mas transacciones a
partir de aqui son los que no trabajan mas no? jeje de ser asi decime pero
avisales a los que tienen el sistema que esas personas pueden estar de
vacaciones o con enfermedad y por eso no tienen registros, ;-).

Decime si entendi esto bien y te paso de ser asi como deberias hacer tu
Select y algunas recomendaciones tambien sobre la estructurita de ese
sistema.

Salu2

Maximiliano Damian Accotto
"Miguel" <#NO_SPAM##NO_SPAM#> escribió en el mensaje
news:%
Hola! muchas gracias por responder!!
La verdad es q algo lioso... a mi me lo han tenido q repetir 2 veces para


q
me enterara bien.
Esa tabla por cada día de trabajo y trabajador tiene un registro, con su
fecha de fin. Los q tengan esa fecha a null es q estan trabajando. Lo q
queremos son los trabajadores q ya no trabajan en la empresa, y son


aquellos
que no tienen ninguna fecha de fin después del 01/12/03, de ahí la


consulta.
Por lo tanto los q tienen null, como trabajan hoy, tampoco queremos que


los
devuelva.
La consulta q me has pasado tb la probé, y la desheché pq me devuelve
aquellos q tienen null a hoy. Eso sí de estos me devuelve la última fecha


de
fin anterior del 01/12/03, pero como tb posteriores no me sirve. Lo q hace
es de cada uno, aunq tenga más allá del 01/12/03 me coge todas las
anteriores, y de ellas la más alta (por el max), y por eso no me sirve (lo
acabo de volver a probar por si acaso). De todos modos muchas gracias


:)
Por cierto Maximiliano, ¿estás tb en la lista de sql server del mug? Pq


sino
creo q tienes un hermano gemelo virtual :)... Estás en todas, q máquina...
Enhorabuena y sigue así campeón!
Un saludo y feliz navidad


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida