Ver Mensaje Individual
  #4 (permalink)  
Antiguo 03/02/2014, 12:00
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 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