Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

duda consulta

Estas en el tema de duda consulta en el foro de SQL Server en Foros del Web. Hola, a ver si me podeis exar una mano esta consulta: SELECT empresa,productor,clave,(select distinct MAX(fecha1) from NINC where Clave = 5) as fechaAlta,(select distinct MAX(fecha1) ...
  #1 (permalink)  
Antiguo 11/05/2010, 03:01
 
Fecha de Ingreso: mayo-2010
Mensajes: 7
Antigüedad: 14 años
Puntos: 0
duda consulta

Hola, a ver si me podeis exar una mano


esta consulta:

SELECT empresa,productor,clave,(select distinct MAX(fecha1) from NINC
where Clave = 5) as fechaAlta,(select distinct MAX(fecha1) from ninc where clave=6) as fechaBaja
FROM ninc
WHERE empresa=001
GROUP BY empresa,productor,clave
ORDER BY productor ASC

tengo unos trabajadores y su fecha maxima en la que fue dado de alta como trabajador, y su fecha maxima que fue dada de baja como trabajador.
(esta gente ha podido trabajar mas de una vez en la empresa, por eso lo de max)

Pero lo que realmente me interesa es sacar los que estan en activo ahora, osea... se sacarian por ....
los que fecha_maxima_alta>fecha_maxima_baja (osea que no existe una fecha de baja mayor a cuando han sido dados de alta, osea que estan trabajando)

Por añadir por si sirve, todo esta en una misma tabla y aparece en este formato:

Clave Fecha1
5 x/x/x ->5 es alta
6 y/y/y ->6 es baja



Esq si yo hago esto por ejemplo me da un error de sintaxis...


SELECT empresa,productor,clave,(select distinct MAX(fecha1) from NINC
where Clave = 5) as fechaAlta,(select distinct MAX(fecha1) from ninc where clave=6) as fechaBaja
FROM ninc
WHERE empresa=001 and fechaAlta>fechaBaja
GROUP BY empresa,productor,clave
ORDER BY productor ASC
  #2 (permalink)  
Antiguo 11/05/2010, 08:38
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: duda consulta

Prueba asi:
Código SQL:
Ver original
  1. SELECT A.empresa,A.productor,A.ALTA,B.BAJA
  2. FROM (
  3.     SELECT empresa,productor,MAX(fecha1)[ALTA]
  4.     FROM ninc
  5.     WHERE empresa=001 AND clave=5
  6.     GROUP BY empresa,productor
  7. ) A
  8. LEFT JOIN (
  9.     SELECT empresa,productor,MAX(fecha1)[BAJA]
  10.     FROM ninc
  11.     WHERE empresa=001 AND clave=6
  12.     GROUP BY empresa,productor
  13. ) B ON A.empresa = B.empresa AND A.productor
  14. WHERE A.ALTA > ISNULL(B.BAJA,1)
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 13/05/2010, 04:13
 
Fecha de Ingreso: mayo-2010
Mensajes: 7
Antigüedad: 14 años
Puntos: 0
Respuesta: duda consulta

Cita:
Iniciado por flaviovich Ver Mensaje
Prueba asi:
Código SQL:
Ver original
  1. SELECT A.empresa,A.productor,A.ALTA,B.BAJA
  2. FROM (
  3.     SELECT empresa,productor,MAX(fecha1)[ALTA]
  4.     FROM ninc
  5.     WHERE empresa=001 AND clave=5
  6.     GROUP BY empresa,productor
  7. ) A
  8. LEFT JOIN (
  9.     SELECT empresa,productor,MAX(fecha1)[BAJA]
  10.     FROM ninc
  11.     WHERE empresa=001 AND clave=6
  12.     GROUP BY empresa,productor
  13. ) B ON A.empresa = B.empresa AND A.productor
  14. WHERE A.ALTA > ISNULL(B.BAJA,1)



Pues me falla la sintaxis y no se pq la vdd. Miro y no lo veo.
Me dice error del where y si kito el ultimo where error productor.
  #4 (permalink)  
Antiguo 13/05/2010, 04:22
 
Fecha de Ingreso: mayo-2010
Mensajes: 7
Antigüedad: 14 años
Puntos: 0
Respuesta: duda consulta

ya lo he visto y lo he puesto bien, faltaba al final A.productor=B.productor.

Ostia tio, la vdd q las clavao! jaja, mestaba costando la vida, esta claro q aunq sepa como funcionan todas las instrucciones me falta mil de nivel x lo q veo.


Voy a ver si necesito meterle algun parametro mas y si no me sale lo pregunto, y si veo q todo ok aviso y tema solucionado
  #5 (permalink)  
Antiguo 13/05/2010, 05:40
 
Fecha de Ingreso: mayo-2010
Mensajes: 7
Antigüedad: 14 años
Puntos: 0
Respuesta: duda consulta

Tengo una duda por cierto:

Xq utilizar el LEFT JOIN y no hacerlo asi...


Código SQL:
Ver original
  1. SELECT A.empresa,A.productor,A.ALTA,B.BAJA
  2.       FROM (
  3.           SELECT empresa,productor, (SELECT MAX(fecha1)[ALTA]
  4.            FROM ninc WHERE clave=5),
  5.           (SELECT MAX(fecha1)[BAJA] FROM ninc WHERE clave=6)
  6.            FROM ninc
  7.            WHERE empresa=001
  8.       ) A
  9.       WHERE A.ALTA > ISNULL(B.BAJA,1)

es decir, esq el mundo JOIN lo acabo de descubrir, en la carrera nos enseñaban todo con from y where y utilizando el (+)



Y por cierto, es raro, utilizando todo lo que me has dixo me salen 200 de 203 registros bien. No me aparecen esos 3 q deberian aparecer. Ademas son registros q son altas, lo digo por el LEFT JOIN q has puesto, deberian aparecer todas las altas aunque no tengan bajas, si lo entiendo bien....


se te ocurre???

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:42.