Constancia

SQL_FUNC_PERCENTIL

Jul 12th, 2015
4,845
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.07 KB | None | 0 0
  1. -- *****************************************************************************************************
  2. -- ************************************** FUNC_PERCENTIL ***********************************************
  3. -- *****************************************************************************************************
  4.  
  5. USE [METRICAS]
  6. GO
  7.  
  8. -- ****** Object:  UserDefinedFunction [dbo].[FUNC_PERCENTIL]    
  9. -- ****** Script Date: 07/12/2015 09:44:13
  10.  
  11. SET ANSI_NULLS ON
  12. GO
  13.  
  14. SET QUOTED_IDENTIFIER ON
  15. GO
  16.  
  17. CREATE FUNCTION [dbo].[FUNC_PERCENTIL](@Factor_Percentil FLOAT) RETURNS FLOAT
  18.  
  19. AS BEGIN
  20.  
  21. DECLARE @Factor FLOAT,@Resultado FLOAT
  22. SET @Factor = @Factor_Percentil
  23.  
  24. SELECT @Resultado = dbo.FUNC_LERP(MAX(d), 0.0, 1.0, MAX(a.TIEMPO), MAX(b.TIEMPO))
  25. FROM
  26.     (
  27.         SELECT FLOOR(kf) AS k, kf-FLOOR(kf) AS d
  28.         FROM(SELECT 1+@Factor*(COUNT(*)-1) AS kf FROM TEMP_TIEMPOS) AS x1
  29.     ) AS x2
  30. JOIN TEMP_TIEMPOS a
  31. ON
  32. (
  33. SELECT COUNT(*) FROM TEMP_TIEMPOS aa WHERE aa.TIEMPO < a.TIEMPO) < k
  34. JOIN TEMP_TIEMPOS b
  35. ON
  36. (SELECT COUNT(*) FROM TEMP_TIEMPOS bb WHERE bb.TIEMPO < b.TIEMPO) < k+1
  37.  
  38.  
  39. RETURN @Resultado
  40. END
  41.  
  42. GO
  43.  
  44. -- *****************************************************************************************************
  45. -- ************************************** FUNC_LERP ****************************************************
  46. -- *****************************************************************************************************
  47.  
  48. USE [METRICAS]
  49. GO
  50.  
  51. -- ****** Object:  UserDefinedFunction [dbo].[FUNC_LERP]    
  52. -- ****** Script Date: 07/12/2015 09:45:53
  53.  
  54. SET ANSI_NULLS ON
  55. GO
  56.  
  57. SET QUOTED_IDENTIFIER ON
  58. GO
  59.  
  60. CREATE FUNCTION [dbo].[FUNC_LERP]
  61.     (@VALUE FLOAT,@low FLOAT,@high FLOAT,@newlow FLOAT,@newhigh FLOAT)
  62. RETURNS FLOAT -- between newlow and newhigh
  63. AS
  64. BEGIN
  65.   RETURN CASE
  66.       WHEN @VALUE BETWEEN @low AND @high AND @newlow <= @newhigh THEN @newlow+dbo.FDIV((@value-@low),@high-@low)*(@newhigh-@newlow)
  67.       WHEN @VALUE = @low AND @newlow IS NOT NULL THEN @newlow
  68.       WHEN @VALUE = @high AND @newhigh IS NOT NULL THEN @newhigh
  69.       ELSE NULL
  70.     END
  71. END
  72.  
  73. GO
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment