2013-05-23 3 views
2
에서 순서를 밖으로 간격 만들기

그래서이 매우 간단해야하고, 나는 내가 부족 황당 쉽게 해결책이있을거야,하지만 여기 간다 :균등 SQL

내가 기반 숫자의 격자를 만들려면 두 개의 숫자 변수.

더 구체적으로 말하자면, 각 변수의 5 백분위 수와 95 백분위 수를 선택한 다음이 두 값의 차이를 100 개로 잘라서 그룹화합니다.

SELECT Min(subq.lat) as latitude, percentile FROM 
(SELECT round(latitude,2) as lat, ntile(100) OVER (order by latitude desc) as  
'percentile' FROM table ORDER BY latitude DESC) AS subq 
where percentile in (5,95) 
group by 2 

내가 번호 목록에서를 만들 수 있습니다 :

그래서 기본적으로 내가 필요한 것을 나는 다음과 같은 쿼리 5와 95 %를 선택할 수 있습니다 의사

(5th percentile)+(95th percentile-5th percentile)/100*[all numbers from 0 to 100] 

에 0에서 100까지.

하지만이 두 가지를 결합하는 방법은 저를 넘어서는 것입니다.

도움을 많이 주시면 감사하겠습니다.

+0

그래서 기본적으로 당신이 95에 5 %의 ILE 값에서가는 매끄러운 라인을 만들려면 : 여기

은 예입니다? 각 단계가 % ile 점을 나타낼 수 있도록 90 단계를 실제로 원할 수 있습니까? – ErikE

+0

아니요, 분명히 100입니다. 기본적으로 5 ~ 95는 100 부분으로 나누고 싶은 신뢰 구간입니다. 그렇지 않으면 위의 SQL에서 where 절을 가져 와서 수행 할 수 있습니다. –

답변

0

나는 당신이 계신 따라 완전히 확실하지 않다,하지만, 1-100 통해 반복 각 세트에 대한 계산을 수행하고 결과 테이블에 삽입 것처럼 간단 할 수있다 :

CREATE TABLE #Results (Counter_ INT, Calc_Value FLOAT) 
GO 
DECLARE @intFlag INT 
SET @intFlag = 1 
WHILE (@intFlag <=100) 
BEGIN 

--Do Stuff 
INSERT INTO #Results 
SELECT Counter_ = @intFlag 
,Calc_Value = (calculation logic)/@intFlag 

SET @intFlag = @intFlag + 1 
END 
GO 

'수행 항목'부분은 각 값 1 - 100에 대해 실행되며, (계산 논리)는 분명히 사용하는 논리로 바꿔야합니다. 이 값이 1-100에 대해 일정하면 변수를 100 번 실행하지 않아도되도록 변수를 설정할 수 있습니다. 대략 :

CREATE TABLE #Results (Counter_ INT, Calc_Value FLOAT) 
GO 
DECLARE @intFlag INT, @Percentile_Value FLOAT = (Calculation Logic) 
SET @intFlag = 1 
WHILE (@intFlag <=100) 
BEGIN 

--Do Stuff 
INSERT INTO #Results 
SELECT Counter_ = @intFlag 
,Calc_Value = @Percentile_Value/@intFlag 

SET @intFlag = @intFlag + 1 
END 
GO 
0

당신은 당신이 윈도우 기능을 수행 할 작업을 할 수 있습니다. 기본적으로 백분위 수 계산은 row_number() 및 총 카운트로 수행하십시오. 그들 사이 100 개 단계를 가지고,

SELECT lat, 
     ((seqnum - 0.05 * cnt)/(0.95 * cnt - 0.05 * cnt)) * 100 as NewPercentile 
FROM (SELECT round(latitude,2) as lat, 
      row_number() over (order by latitude) as seqnum, 
      count(*) over() as cnt 
     FROM table 
     ORDER BY latitude DESC 
    ) AS subq 
where seqnum between 0.05 * cnt and 0.95 * cnt