2013-07-23 8 views
1

모두 좋은 하루. 나는 해결책을 찾을 수 없었고 어떤 도움을 찾고있다. 나는이를 추가 할테이블의 여러 열을 기반으로 열을 추가하는 방법

ID  Time_Stamp      Activity_Log       Group 
1254 6/1/2013 8:00:00AM   'Ticket was opened by user A'    NULL 
1254 6/2/2013 8:20:00AM   'Comment was logged by user B'    NULL 
1254 6/4/2013 8:25:00AM   '**Ticket was transferred to Group 1**'  Group 1 
1254 6/7/2013 8:50:00AM   'Comment was logged by user B'    Group 1 
1254 6/11/2013 10:00:00AM  'Comment was logged by user C'    Group 1 
1254 6/12/2013 12:00:00PM  '**Ticket was transferred to Group 2**'  Group 2 
7589 6/3/2013 11:00:00PM  'Ticket was opened by user A'    NULL 
7589 6/5/2013 1:00:00PM   'Comment was logged by user C'    NULL 
7589 6/7/2013 2:00:00PM   'Resolution provided by user C'    NULL 
7589 6/11/2013 5:00:00PM  'Ticket resolved by user C'     NULL 
8526 6/3/2013 7:00:00PM  'Ticket opened by user D'      NULL 
8526 6/4/2013 2:00:00PM  '**Ticket was transferred to Group 2**'  Group 2 
8526 6/5/2013 1:00:00PM  'Comment was logged by user G'    Group 2 
8526 6/8/2013 5:00:00PM  '**Ticket was resolved by user C**'   Group 2 

: 나는 열 추가하고자하는 테이블이 있습니다처럼 여기

ID  Time_Stamp      Activity_Log 
1254 6/1/2013 8:00:00AM   'Ticket was opened by user A' 
1254 6/2/2013 8:20:00AM   'Comment was logged by user B' 
1254 6/4/2013 8:25:00AM   '**Ticket was transferred to Group 1**' 
1254 6/7/2013 8:50:00AM   'Comment was logged by user B' 
1254 6/11/2013 10:00:00AM  'Comment was logged by user C' 
1254 6/12/2013 12:00:00PM  '**Ticket was transferred to Group 2**' 
7589 6/3/2013 11:00:00PM  'Ticket was opened by user A' 
7589 6/5/2013 1:00:00PM   'Comment was logged by user C' 
7589 6/7/2013 2:00:00PM   'Resolution provided by user C' 
7589 6/11/2013 5:00:00PM  'Ticket resolved by user C' 
8526 6/3/2013 7:00:00PM  'Ticket opened by user D' 
8526 6/4/2013 2:00:00PM  '**Ticket was transferred to Group 2**' 
8526 6/5/2013 1:00:00PM  'Comment was logged by user G' 
8526 6/8/2013 5:00:00PM  '**Ticket was resolved by user C**' 

을 나는 새 열, 그룹 싶은 것이있다, 봐합니다 Activity_Log가 LIKE '% xx %'이면 문자열이있는 그룹 열과 ID 및 Time_Stamp를 기반으로 한 이후의 각 행에 대한 열이 포함됩니다. ID 중 일부는 activity_log에 언어를 포함하지 않으며 Group 열은 모든 행에 대해 NULL이됩니다. 그렇게하는 경우 activity_log가 '그룹 x %로 전송'과 같이 LIKE하고 'activity % _log'가 '% x 그룹으로 전송'또는 '% 티켓이 해결 된 %'와 같은 시점에서 시작하고 싶습니다. 나는 OVER (by partition by)를 사용하여 ID로 섹션에 대한 쿼리를 작성하려고했지만 성공하지 못했습니다.

감사합니다.

+2

그래서 ... 계산 된 열? 또한, 어떤 dbms입니까? [tag : sql]은 다소 모호합니다. 추신. 테이블의 크기에 따라 일반 열을 추가하고이를 통해 일회용 파서를 실행 한 다음 트리거를 사용하여 새 열을 동기화 된 상태로 유지할 수 있습니다. 계산 된/계산 된 열은 추가 된 오버 헤드 측면에서 매우 집중적 일 수 있습니다. –

+1

이 '그룹'열을 쓰는 것이 데이터베이스가 아닌 앱 코드의 책임일까요? 앱 코드에는 올바르게 설정하는 데 필요한 모든 정보가있는 것 같습니다. –

답변

2

"누적 최대"기능으로이를 수행 할 수 있습니다. 이 전에 SQL 서버 여기에 2012

에 SQL 서버를 제외하고, 윈도우 기능을 지원하는 대부분의 데이터베이스에서 지원하는 것이 방법입니다 :

select t.id, t.Time_Stamp, t.Activity_Log, 
     MAX(GroupName) over (partition by id order by TimeStamp) as "Group"  
from (select t.*, 
      (case when Activity_Log like '%transferred to Group%' 
        then left(RIGHT(Activity_Log, 9), 7) 
       end) as GroupName 
     from t 
    ) t; 

실제로 열로이 추가하고 싶은 경우에, 열을 추가하려면 테이블을 변경 한 다음 update 문을 사용해야합니다.

당신이 데이터베이스에 누적 합계를 지원하지 않는 경우에도 상관 하위 쿼리에 대한 작업을 수행 할 수 있습니다

select t.id, t.Time_Stamp, t.Activity_Log, 
     (select left(RIGHT(t2.Activity_Log, 9), 7) 
     from t t2 
     where t2.id = t.id and 
       t2.TimeStamp <= t.TimeStamp and 
       Activity_Log like '%transferred to Group%' 
     order by t2.TimeStamp desc 
     limit 1 
     ) as "Group" 
from t; 
0

내가 Gordon Linoff's 솔루션과 함께 갈 것입니다,하지만 당신은 당신이 필요로하는 열을 추가 할 수 있습니다 ALTER TABLE 저장하려는 경우 정보 만 표시하려면 SELECT도 좋습니다.

ALTER TABLE tblLog 
ADD Group VARCHAR(4) 
관련 문제