2014-10-16 3 views
0

저울 (가중치)에서 부동 소수점 값을 기록하는 테이블이 있습니다. 이 곡선의 적분 값의 절대 값을 동적으로 계산하고 싶습니다. 저는 사다리꼴 대략을 기반으로 간단한 대수학을 수행하려고합니다. 하나의 샘플링 레이트 (B-A = 1)와 :MS SQL Server Algebraic Syntax

(b-a)((f(a)+f(b))/2 - f(a)) 

값을 F (a)이고, f (b)는 내 SQL 서버 테이블에 기록 된 2 개 개의 가장 최근의 값을 나타낸다. 나는 evalution 오류로 다음 시도했습니다

SELECT TOP 2 
    SUM(Scale_Weight) OVER(ORDER BY t_stamp DESC)/2.0 
FROM table 

이 쿼리는 평가를, 단순히 2에 의한 가장 최근의 값 분할 : 당신이 볼 수 있듯이

SELECT 
    SUM(Scale_Weight) OVER(ORDER BY t_stamp DESC)/2.0 
FROM table 

, 심지어 시도하지 않은이 특정 행 (셀?)을 참조하는 방법을 모르기 때문에 절대 값 또는 "두 번째 가장 최근"값의 뺄셈. 멍청한 놈으로서 수학이 단일 쿼리에서 가능하다고 생각합니다. 적절한 구문을 찾을 수 없습니다. 미리 감사드립니다. 어떤 이유로 나는이 기능을 "TOP"를 구현할 수 없어요하지만, 입력 ps2goat에 대한

감사합니다, 그래서 현재이 있습니다 :

그래서 더 명확하게 업데이트 할 수

SELECT ABS(SUM(Scale_Weight) OVER(PARTITION BY quality_code 
    ORDER BY t_stamp 
    ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)/2.0) 
FROM table 

아직도 필요 이전 값을 빼기 위해 다음과 같이 입력하십시오.

SELECT ABS(SUM(Scale_Weight) OVER(PARTITION BY quality_code 
    ORDER BY t_stamp 
    ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)/2.0 
    - 1 PRECEDING) 
FROM table 

위의 빼기 값을 참조 할만한 아이디어가 있습니까?

답변

1

LAG 함수를 사용하여 특정 순서의 마지막 값을 참조 할 수 있습니다. 예 :

SELECT Scale_Weight AS Current, LAG(Scale_Weight) AS Last OVER (ORDER BY t_stamp) 
FROM table 

이 쿼리에 수식을 추가 할 수 있습니다.

0

이것은 내가 한 일입니다. 사람들이 증가하고 쉽게 그 대신 타임 스탬프, 나는 (당신이 시간 값 또는 실제 타임 스탬프 값을 가지고 있는지 확실하지 않습니다)를 수동으로 입력, 아이덴티티 필드를 사용

바이올린 : http://sqlfiddle.com/#!6/77bcb/4/0

스키마 :

create table x(
    xId int identity(1,1) not null primary key, 
    scale_weight decimal(12,4) 
); 

insert into x(scale_weight) 
select 24.1234 union all 
select 32.4455 union all 
select 88.1234 union all 
select 223.443; 

내부 쿼리 (아래)는 내림차순으로 정렬 된 상위 두 행을 가져옵니다 (t_stamp 열 사용). 외부 쿼리는 내부 쿼리에 의해 반환 된 모든 Scale_Weight 값을 합계하고이 값을 2로 나눕니다.

SQL : 입력 ps2goat에 대한

select SUM(Scale_Weight)/2.0 from 
(
    SELECT TOP 2 Scale_Weight  
    FROM x 
    ORDER BY xid DESC 
) y 
+0

감사합니다, 어떤 이유로 나는 기능을 "TOP"을 구현 할 수없는, 그래서 나는 현재이 가지고 있지만 : (Scale_Weight) OVER ( SELECT ABS (SUM을 파티션 by quality_code \t ORDER BY t_stamp \t 1 PRECEDING 및 CURRENT ROW 사이의 행)/2.0) 테이블 FROM 아직도 이전 값을 뺄 필요가 뭔가 같은 : SELECT ABS (SUM (Scale_Weight) OVER (이전과 현재의 행 간의 1 t_stamp \t ROWS BY quality_code \t ORDER BY PARTITION) /2.0 - 1 PRECEDING) FROM 표 앞의 빼기 ​​값을 참조 할만한 아이디어가 있습니까? – user2795886

+0

어떤 버전의 SQL Server를 사용하고 있습니까? – ps2goat

+0

처음에 이것을 포함해야했지만 제 3 자 OPC 소프트웨어를 사용하여 MSSQL 변환기를 통해 자동으로 테이블을 생성했습니다 ("톱"이 작동하지 않는 이유라고 생각합니다). 버전을 구할 수는 있지만 도움이 될지 확신 할 수 없습니다. – user2795886