2015-01-27 2 views
0

나는 거래라는 테이블이 있습니다. 나는 cmnt_cre_dates 사이의 날짜를 측정 할 수 있기를 원합니다.동일한 열에있는 두 날짜 간의 차이를 계산합니다.

pt_id name    trans_cmnt pt_loc last_bl_date cmnt_cre_date diff_days 
94578 RAMIREZ , JOHN Trans 130 S  1/8/2015  1/8/2015   0 
94578 RAMIREZ , JOHN Trans 146 S  1/8/2015  1/9/2015   1 
94578 RAMIREZ , JOHN Trans 380 S  1/8/2015  1/13/2015  4 
94578 RAMIREZ , JOHN Trans 344 S  1/8/2015  1/15/2015  2 
54678 KIFLE ,LOLA  Trans 146 S  1/16/2015 1/16/2015  0 
54678 KIFLE ,LOLA  Trans 230 S  1/16/2015 1/16/2015  0 
12547 WEISS ,Jenny  Trans 230 S  1/26/2015 1/26/2015  0 
12711 FARRELL ,DIVINA Trans 230 S  1/14/2015 1/14/2015  0 
12711 JOHNS ,NATIVIDAD Trans 230 S  1/23/2015 1/13/2015  0 
12711 JOHNS ,NATIVIDAD Trans 230 S  1/23/2015 1/23/2015  10 

를 내가 SQL에서이 작업을 수행하려면 어떻게 :

표는 내가 테이블은 다음과 같이하고 싶은이

pt_id name    trans_cmnt pt_loc last_bl_date cmnt_cre_date 
94578 RAMIREZ , JOHN Trans 130  S  1/8/2015  1/8/2015 
94578 RAMIREZ , JOHN Trans 146  S  1/8/2015  1/9/2015 
94578 RAMIREZ , JOHN Trans 380  S  1/8/2015  1/13/2015 
94578 RAMIREZ , JOHN Trans 344  S  1/8/2015  1/15/2015 
54678 KIFLE ,LOLA  Trans 146  S  1/16/2015 1/16/2015 
54678 KIFLE ,LOLA  Trans 230  S  1/16/2015 1/16/2015 
12547 WEISS ,Jenny  Trans 230  S  1/26/2015 1/26/2015 
12711 FARRELL ,DIVINA Trans 230  S  1/14/2015 1/14/2015 
12711 JOHNS ,NATIVIDAD Trans 230  S  1/23/2015 1/13/2015 
12711 JOHNS ,NATIVIDAD Trans 230  S  1/23/2015 1/23/2015 

처럼 보인다? 당신은 당신이 사용하고있는 데이터베이스를 지정하지 않았기 때문에

update your_table current set diff_days = 
cmnt_cre_date - (select max(cmnt_cre_date) from your_table 
        where cmnt_cre_date < current.cmnt_cre_date 
        and name = current.name) ; 

update your_table set diff_days = 0 where diff_days is null; 

위를

+0

어떤 데이터베이스를 사용하고 있습니까? –

답변

0

내가 제대로 이해하면 ..., 포스트 그레스입니다.

+0

SQL 서버 2008 – user3814197

+0

나는 포스트 그레스에 익숙하지 않다. – user3814197

0

당신은

SELECT 
    T.pt_id 
    , T.name 
    , T.trans_cmnt 
    , T.pt_loc 
    , T.last_bl_date 
    , T.cmnt_cre_date 
    , ISNULL(DATEDIFF(day, 
        (SELECT MAX(cmnt_cre_date) 
        FROM Transactions 
        WHERE name = T.name AND cmnt_cre_date < T.cmnt_cre_date), 
        cmnt_cre_date), 
      0) diff_days 
FROM Transactions T 
; 

기억하십시오 함께 작업 할 수 있습니다 : 당신이 ORDER BY 절을 제공하지 않는 경우, 일부 특정 순서로 반환되는 기록에 의존 할 수 없다.

조정/추가 세부 정보가 필요하면 의견을 말하십시오.

관련 문제