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

Consulta con resultado basado en una condicion

Estas en el tema de Consulta con resultado basado en una condicion en el foro de SQL Server en Foros del Web. Buen día, tengo una consulta que genera el siguiente resultado: No. de Parte | Entry No.| Fecha Reg. | Cantidad 71199051762 | 530647 | 29/10/2013 ...
  #1 (permalink)  
Antiguo 01/02/2014, 12:29
 
Fecha de Ingreso: febrero-2014
Mensajes: 1
Antigüedad: 10 años, 3 meses
Puntos: 0
Mensaje Consulta con resultado basado en una condicion

Buen día, tengo una consulta que genera el siguiente resultado:

No. de Parte | Entry No.| Fecha Reg. | Cantidad
71199051762 | 530647 | 29/10/2013 | 6
71199051762 | 540517 | 10/12/2013 | 1
71471291604 | 541501 | 16/12/2013 | 14
71471291604 | 546111 | 07/01/2014 | 97
71471544475 | 518581 | 07/09/2013 | 12
71471544475 | 536419 | 23/11/2013 | 1
11121740065 | 531407 | 31/10/2013 | 1
11121740065 | 531418 | 31/10/2013 | 1
11127507217 | 544866 | 31/12/2013 | 2
11127507217 | 544867 | 31/12/2013 | 2
11129070990 | 542506 | 19/12/2013 | 4
11129070990 | 549891 | 23/01/2014 | 4


Los numeros de parte estan duplicados o triplicados. Necesito filtrar de esos resultados los numeros de parte con la Fecha de Registro mas reciente o con el "Entry No." mayor, con cualquiera de las 2 formas se obtiene la pieza con entrada mas reciente al inventario.

Como les comenté este listado se obtiene de un select previo.

Espero puedan apoyarme con alguna idea. Saludos

Última edición por cruxez; 01/02/2014 a las 12:39
  #2 (permalink)  
Antiguo 01/02/2014, 19:59
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta con resultado basado en una condicion

podria ser:

Código SQL:
Ver original
  1. SELECT * FROM tabla WHERE No_de_Parte + Entry_No + Fecha Reg IN (
  2.  
  3. SELECT No_de_Parte + MAX(Entry_No) + MAX(Fecha Reg) FROM tabla GROUP BY no_de_parte)

aclarando, se tendrian que convertir los datos a varchar para poder hacer la concatenacion :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 03/02/2014, 11:31
 
Fecha de Ingreso: marzo-2009
Mensajes: 8
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Consulta con resultado basado en una condicion

Como no tengo la consulta previa, solo se me ocurre hacerlo de la siguiente manera. copia y pega para probar y aplicarlo a tu codigo.

Código SQL:
Ver original
  1. DECLARE @inventario AS TABLE(
  2. id INT IDENTITY(1,1),
  3. NodeParte VARCHAR(25),
  4. EntryNo INT,
  5. FechaReg datetime,
  6. Cantidad INT
  7. )
  8. DECLARE @Nuevoinventario AS TABLE(
  9. id INT IDENTITY(1,1),
  10. NodeParte VARCHAR(25),
  11. EntryNo INT,
  12. FechaReg datetime,
  13. Cantidad INT
  14. )
  15.  
  16. DECLARE
  17. @c INT = 0,
  18. @currentID INT = 1,
  19. @LIMIT INT
  20.  
  21. INSERT INTO @inventario
  22. SELECT
  23. 71199051762, 530647, '2013/10/29', 6
  24. UNION
  25. SELECT 71199051762, 540517, '2013/12/10', 1
  26. UNION
  27. SELECT
  28. 71471291604, 541501, '2013/12/16', 14
  29. UNION
  30. SELECT
  31. 71471291604, 546111, '2014/01/07', 97
  32. UNION
  33. SELECT
  34. 71471544475,518581,'2013/09/07', 12
  35. UNION
  36. SELECT
  37. 71471544475,536419,'2013/11/23',1
  38. UNION
  39. SELECT
  40. 11121740065 , 531418 , '2013/10/31' , 1
  41. UNION
  42. SELECT
  43. 11121740065,531407,'2013/10/31',1
  44. UNION
  45. SELECT
  46. 11127507217 , 544866 , '2013/12/31' , 2
  47. UNION
  48. SELECT
  49. 11127507217 , 544867 , '2013/12/31' , 2
  50. UNION
  51. SELECT
  52. 11129070990 , 542506 , '2013/12/19' , 4
  53. UNION
  54. SELECT
  55. 11129070990 , 549891 , '2014/01/23' , 4
  56.  
  57. SET @LIMIT = (SELECT COUNT(*) FROM @inventario)
  58.  
  59.  
  60. WHILE @currentID <= @LIMIT
  61.     BEGIN
  62.         INSERT INTO @Nuevoinventario
  63.         SELECT  TOP 1 NodeParte,EntryNo,FechaReg,Cantidad
  64.         FROM @inventario
  65.         WHERE id = @currentID AND NodeParte NOT IN(SELECT NodeParte FROM @Nuevoinventario)
  66.         ORDER BY FechaReg ASC
  67.         SET @currentID = @currentID + 1
  68.     END
  69.  
  70. SELECT * FROM @Nuevoinventario
  #4 (permalink)  
Antiguo 03/02/2014, 12:00
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta con resultado basado en una condicion

Cita:
Iniciado por TonyBoy Ver Mensaje
Como no tengo la consulta previa, solo se me ocurre hacerlo de la siguiente manera. copia y pega para probar y aplicarlo a tu codigo.

Código SQL:
Ver original
  1. DECLARE @inventario AS TABLE(
  2. id INT IDENTITY(1,1),
  3. NodeParte VARCHAR(25),
  4. EntryNo INT,
  5. FechaReg datetime,
  6. Cantidad INT
  7. )
  8. DECLARE @Nuevoinventario AS TABLE(
  9. id INT IDENTITY(1,1),
  10. NodeParte VARCHAR(25),
  11. EntryNo INT,
  12. FechaReg datetime,
  13. Cantidad INT
  14. )
  15.  
  16. DECLARE
  17. @c INT = 0,
  18. @currentID INT = 1,
  19. @LIMIT INT
  20.  
  21. INSERT INTO @inventario
  22. SELECT
  23. 71199051762, 530647, '2013/10/29', 6
  24. UNION
  25. SELECT 71199051762, 540517, '2013/12/10', 1
  26. UNION
  27. SELECT
  28. 71471291604, 541501, '2013/12/16', 14
  29. UNION
  30. SELECT
  31. 71471291604, 546111, '2014/01/07', 97
  32. UNION
  33. SELECT
  34. 71471544475,518581,'2013/09/07', 12
  35. UNION
  36. SELECT
  37. 71471544475,536419,'2013/11/23',1
  38. UNION
  39. SELECT
  40. 11121740065 , 531418 , '2013/10/31' , 1
  41. UNION
  42. SELECT
  43. 11121740065,531407,'2013/10/31',1
  44. UNION
  45. SELECT
  46. 11127507217 , 544866 , '2013/12/31' , 2
  47. UNION
  48. SELECT
  49. 11127507217 , 544867 , '2013/12/31' , 2
  50. UNION
  51. SELECT
  52. 11129070990 , 542506 , '2013/12/19' , 4
  53. UNION
  54. SELECT
  55. 11129070990 , 549891 , '2014/01/23' , 4
  56.  
  57. SET @LIMIT = (SELECT COUNT(*) FROM @inventario)
  58.  
  59.  
  60. WHILE @currentID <= @LIMIT
  61.     BEGIN
  62.         INSERT INTO @Nuevoinventario
  63.         SELECT  TOP 1 NodeParte,EntryNo,FechaReg,Cantidad
  64.         FROM @inventario
  65.         WHERE id = @currentID AND NodeParte NOT IN(SELECT NodeParte FROM @Nuevoinventario)
  66.         ORDER BY FechaReg ASC
  67.         SET @currentID = @currentID + 1
  68.     END
  69.  
  70. SELECT * FROM @Nuevoinventario
Es mucho codigo cuando lo puedes obtener con un un select con un subquery :)


algo como esto:

Código SQL:
Ver original
  1. DECLARE @inventario AS TABLE(
  2. id INT IDENTITY(1,1),
  3. NodeParte VARCHAR(25),
  4. EntryNo INT,
  5. FechaReg datetime,
  6. Cantidad INT
  7. )
  8.  
  9.  
  10. INSERT INTO @inventario
  11. SELECT
  12. 71199051762, 530647, '2013/10/29', 6
  13. UNION
  14. SELECT 71199051762, 540517, '2013/12/10', 1
  15. UNION
  16. SELECT
  17. 71471291604, 541501, '2013/12/16', 14
  18. UNION
  19. SELECT
  20. 71471291604, 546111, '2014/01/07', 97
  21. UNION
  22. SELECT
  23. 71471544475,518581,'2013/09/07', 12
  24. UNION
  25. SELECT
  26. 71471544475,536419,'2013/11/23',1
  27. UNION
  28. SELECT
  29. 11121740065 , 531418 , '2013/10/31' , 1
  30. UNION
  31. SELECT
  32. 11121740065,531407,'2013/10/31',1
  33. UNION
  34. SELECT
  35. 11127507217 , 544866 , '2013/12/31' , 2
  36. UNION
  37. SELECT
  38. 11127507217 , 544867 , '2013/12/31' , 2
  39. UNION
  40. SELECT
  41. 11129070990 , 542506 , '2013/12/19' , 4
  42. UNION
  43. SELECT
  44. 11129070990 , 549891 , '2014/01/23' , 4
  45.  
  46.  
  47. SELECT * FROM @inventario WHERE CONVERT(VARCHAR(20),entryno) + '|' + CONVERT(VARCHAR(20),nodeparte) IN (SELECT CONVERT(VARCHAR(20),MAX(entryno)) + '|' + CONVERT(VARCHAR(20),nodeparte) FROM @inventario GROUP BY nodeparte)
__________________
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; 03/02/2014 a las 12:09
  #5 (permalink)  
Antiguo 04/02/2014, 11:17
 
Fecha de Ingreso: marzo-2009
Mensajes: 8
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: Consulta con resultado basado en una condicion

Muy buena Solución Saludos es buena la retroalimentarse =).

solo faltaría que nos dija el usuario cruxez que paso si lo pudo implementar o que paso....

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




La zona horaria es GMT -6. Ahora son las 10:51.