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

no repetidos y repetidos de mayor fecha

Estas en el tema de no repetidos y repetidos de mayor fecha en el foro de SQL Server en Foros del Web. Hola buenos días Tengo la tabla [MENAJE CATALOGO] con los campos CÓDIGO, [Fecha de Vencimiento], PRECIO, UNIDADES Y quisiera hacer una consulta en SQL que ...
  #1 (permalink)  
Antiguo 05/06/2014, 02:23
 
Fecha de Ingreso: junio-2014
Mensajes: 3
Antigüedad: 8 años, 2 meses
Puntos: 0
no repetidos y repetidos de mayor fecha

Hola buenos días

Tengo la tabla [MENAJE CATALOGO] con los campos CÓDIGO, [Fecha de Vencimiento], PRECIO, UNIDADES
Y quisiera hacer una consulta en SQL que me recogiese los productos no repetidos que tienen fecha de vencimiento NULL y de los productos repetidos aquellos cuya fecha de vencimiento es la máxima. Lo he intentado de muchas formas con consultas como esta pero sin resultado ¿puede alguien decirme que estoy haciendo mal?
Código SQL:
Ver original
  1. SELECT CÓDIGO,  [Fecha de Vencimiento], PRECIO, UNIDADES
  2. FROM [MENAJE CATALOGO]
  3. IF (SELECT COUNT (CÓDIGO) FROM [MENAJE CATALOGO] WHERE [Fecha de Vencimiento] IS NULL) > 0
  4. SELECT * FROM [MENAJE CATALOGO] WHERE   [Fecha de Vencimiento] IS NULL
  5. ELSE
  6. SELECT *  FROM [MENAJE CATALOGO] WHERE  CÓDIGO = (SELECT MAX( [Fecha de Vencimiento]) FROM [MENAJE CATALOGO]) ;
Gracias por leerme y un saludo a todos
Azucena

Última edición por gnzsoloyo; 09/06/2014 a las 10:22
  #2 (permalink)  
Antiguo 05/06/2014, 07:54
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 16 años
Puntos: 774
Respuesta: no repetidos y repetidos de mayor fecha

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. codigo INT,
  4. fecha datetime,
  5. precio INT,
  6. unidades INT
  7. )
  8.  
  9. INSERT INTO #temp VALUES (1,getdate(),100,1)
  10. INSERT INTO #temp VALUES (2,getdate(),100,1)
  11. INSERT INTO #temp VALUES (3,NULL,100,1)
  12. INSERT INTO #temp VALUES (4,NULL,100,1)
  13. INSERT INTO #temp VALUES (5,getdate()+1,100,1)
  14. INSERT INTO #temp VALUES (5,getdate(),100,1)
  15. INSERT INTO #temp VALUES (6,getdate(),100,1)
  16. INSERT INTO #temp VALUES (6,getdate()+2,100,1)
  17.  
  18. SELECT COUNT(codigo) total, codigo,fecha,precio,unidades FROM #temp WHERE fecha IS NULL GROUP BY codigo,fecha,precio,unidades HAVING COUNT(codigo)=1
  19.  
  20.  
  21. SELECT t1.* FROM(
  22. SELECT * FROM #temp WHERE codigo IN(
  23. SELECT codigo FROM(
  24. SELECT COUNT(codigo) AS total, codigo FROM #temp GROUP BY codigo HAVING COUNT(codigo)>1
  25. ) AS TABLE)
  26. ) t1
  27. LEFT JOIN (SELECT MAX(fecha) AS m_fecha, codigo FROM #temp GROUP BY codigo) AS t2 ON (t1.codigo=t2.codigo AND t1.fecha=t2.m_fecha)
  28. WHERE t2.m_fecha IS NOT NULL

usando algunos datos de ejemplo y la estructura que mencionas podria quedar algo como esto :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 05/06/2014 a las 07:59
  #3 (permalink)  
Antiguo 09/06/2014, 01:19
 
Fecha de Ingreso: junio-2014
Mensajes: 3
Antigüedad: 8 años, 2 meses
Puntos: 0
Respuesta: no repetidos y repetidos de mayor fecha

Gracias Libras por tú tiempo eres un Sol, tiene muchas ideas interesantes, aunque necesito más conocimiento técnico, voy a estudiarlo.
De momento lo solucione así:
Código SQL:
Ver original
  1. SELECT CÓDIGO, MAX[Fecha de Vencimiento], MIN(PRECIO), UNIDADES
  2. FROM [MENAJE CATALOGO]
  3. WHERE [FECHA DE VENCIMIENTO]>=DATE()
  4. GROUP BY CODIGO, UNIDADES;

Espero que no me de problemas !GLUP¡ que el trabajo esta muy dificil.

Gracias a todos los que me leyeron.

Última edición por gnzsoloyo; 09/06/2014 a las 10:24
  #4 (permalink)  
Antiguo 09/06/2014, 08:05
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 16 años
Puntos: 774
Respuesta: no repetidos y repetidos de mayor fecha

Cita:
Iniciado por Azucena2 Ver Mensaje
Gracias Libras por tú tiempo eres un Sol, tiene muchas ideas interesantes, aunque necesito más conocimiento técnico, voy a estudiarlo.
De momento lo solucione así:

SELECT CÓDIGO, MAX[Fecha de Vencimiento], MIN(PRECIO), UNIDADES
FROM [MENAJE CATALOGO]
WHERE [FECHA DE VENCIMIENTO]>=Date()
GROUP BY CODIGO, UNIDADES;

Espero que no me de problemas !GLUP¡ que el trabajo esta muy dificil.

Gracias a todos los que me leyeron.
Eso no soluciona realmente el problema que mencionaste, ahi solo obtienes los que tengan una fecha mayor o igual a la actual......pero si resuelve tu problema go ahead ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 10/06/2014, 00:23
 
Fecha de Ingreso: junio-2014
Mensajes: 3
Antigüedad: 8 años, 2 meses
Puntos: 0
Respuesta: no repetidos y repetidos de mayor fecha

Gracias Libras por tu contestación. Como son ofertas, las de fechas anteriores no tienen vigor. De todas formas hay que probarlo con el tiempo, no se bien que va a pasar si coinciden varias con la misma fecha de vencimiento por ejemplo; de todas formas voy mirando la anterior que me enviaste , aunque tengo que estudiar más.

Salu2

Etiquetas: access, elseif, fecha
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




La zona horaria es GMT -6. Ahora son las 20:50.