2016-09-28 3 views
1

질문에서 알 수 있듯이 다른 행을 제외하고 같은 열에서 수학 연산을 수행하는 방법이 있습니까?데이터베이스의 다른 행에있는 동일한 열에서 수학 연산을 수행하는 방법은 무엇입니까?

예.

Table A:     
    X Y Time New_time 
0 aaa bbb 5   3 
1 aaa bbb 2   1 
2 aaa bbb 1   null 

각 행의 시간 차이를 찾고 싶습니다. 따라서 행 0은 new_time을 3 분으로합니다. 이 일을 어떻게 하죠?

미리 감사드립니다.

+0

마이크로 소프트 SQLSERVER는 DBMS입니다. DB를하기 전에 데이터베이스를 Microsoft SQL Server 2008을 사용하고있었습니다. – RustyShackleford

답변

2

당신은 SQL 서버 2012에 도입 LEAD 분석 기능을 사용할 수 있습니다

CREATE TABLE [dbo].[Times] 
    (
     [ID] [INT] IDENTITY(1, 1) 
       NOT NULL , 
     [X] [NVARCHAR](50) NOT NULL , 
     [Y] [NVARCHAR](50) NOT NULL , 
     [Time] [INT] NOT NULL 
    ); 


INSERT INTO [dbo].[Times] 
     (X, Y, [Time]) 
VALUES ('aaa', 'bbb', 5), 
     ('aaa', 'bbb', 2), 
     ('aaa', 'bbb', 1); 

SELECT * , 
     New_Time = [Time] - (LEAD([Time]) OVER (ORDER BY ID)) 
FROM [Times]; 

을 그리고 출력은 다음과 같습니다

enter image description here

+0

에는 데이터베이스의 수백만 행에이 차이가 적용되므로 값 부분에있는 것과 같이 실제 시간을 지정하지 않는 방법이 있습니다. 미안 초보자. – RustyShackleford

+0

RustyShackleford 값이 삽입 쿼리에 있습니까? 귀하의 질문에 대답하지 않습니다 – Yared

+0

네, 삽입 쿼리는 INSERT 쿼리에 각 열의 시간을 입력하는 대신 열의 모든 셀로 이동하도록 지정하는 방법이 있습니다. – RustyShackleford

1
declare @Table1 table(id int, x varchar(10), y varchar(10), [time] int) 
insert into @Table1 values 
(0,'aaa', 'bbb', 5) 
,(1,'aaa', 'bbb', 2) 
,(2,'aaa', 'bbb', 1) 

select *, 
[time] - LEAD([Time]) over(order by id) as NewTime 
from @Table1 
+0

응답 해 주셔서 감사합니다. 어떻게 'value'부분의 수백만 행에 함수를 적용 할 수 있습니까? – RustyShackleford

+1

사실, select 문을 테이블에 적용해야합니다. 샘플 테이블을 초기화하기 위해 제공된 값 부분. 수백만 개의 행이 있다면 BULK INSERT와 같은 것을 사용하여로드해야 할 것입니다. –

관련 문제