2010-06-07 2 views
2

내 테이블이이 순서처럼 보입니다.이 조건으로 TermID를 계산하고 싶습니다. 그것이 가능하면 이러한 헤더가없는 결과를 얻으려면

-보다 더 일해야합니다 상태 날짜 (오픈 상태) - (가까운 엽니 다)
열기 설정해야 TERMID 상태 - TERMID 가까이 또는 개방 상태
이 있어야합니다 가까운 상황보고 날짜
안부와SQL 쿼리 샘플

,

 

ID  TermID Status Date 
103990107 103641 Close 28/05/2010 
104000600 103641 Open 31/05/2010 
103980976 106458 Close 26/05/2010 
103990045 106458 Open 27/05/2010 
103939537 106475 Open 18/05/2010 
103908130 117220 Open 13/05/2010 
103929653 117220 Open 13/05/2010 
103999017 117360 Open 31/05/2010 
103834814 117402 Open 05/05/2010 
103993973 117420 Open 28/05/2010 
103849795 119377 Close 05/05/2010 
103955266 119377 Close 21/05/2010 
103995229 119377 Close 29/05/2010 
103979873 119704 Open 25/05/2010 
103832225 119767 Open 04/05/2010 
103925429 123229 Close 15/05/2010 
103986986 123932 Open 27/05/2010 

+1

오라클에서 작동합니다 어떤 데이터베이스 ... –

+1

가 어떻게 그들이 모두 같은 날짜 및 상태를 표시하고 119377'''117220'의 최신이며, 어떤 날짜 알 수 있습니까? –

+1

질문을 다시 말해보십시오. TermID를 계산하도록 요청하고 있지만 TermID 상태와 날짜도 변경하고 싶습니까? 위의 내용이 쓰여졌을 때 나는 무엇을하고 싶은지 잘 모르겠습니다. 한 번에 전체 문제를 진술하는 대신 개별적인 질문으로 질문을 나눌 수 있습니다. –

답변

0

난 당신이 여기에이 개 질문을 것 같아요 :


어떻게 모든 TermID를 계산합니까?

응답 :count(...) 집계 함수를 SQL에 사용합니다.

예 :

SELECT count(TermID) from <table> 

이 테이블의 모든 TermIDs을 계산합니다.


2 어떻게 새로운 상태/상태 날짜가 내 기록을 업데이트하려면 어떻게해야합니까?

답변 : 사용하여 UPDATE 문 :

UPDATE <table> 
SET Status = 'Open', <column name> = <value>, ... 
WHERE Staus = 'Closed' 

참고 : 당신의 질문이 모호한 것 같다, 그래서 위의 잘 작동하지 않을 수 있습니다. 특정 유스 케이스에 맞게 조정하십시오.

+0

즉, 결과 하나 termID는 2010 년 5 월 26 일에 처음으로 닫히고 27/05/2010에 열리기 때문에 '106458'이됩니다. 열린 상태는 닫힌 상태 후에 발생합니다. 나는 닫힌 termID를 얻고 싶습니다. 이제는 열려 있습니다 – qods

0

시도해보십시오. 그것은

SELECT TermID, COUNT(*) CNT FROM 
(
SELECT ID,TermID,Status, Date, 
LEAD(Status,1,NULL) OVER (PARTITION BY TermID ORDER BY Date DESC) NEXT_STATUS, 
FROM MYTABLE 
) 
WHERE Status = 'Close' AND NEXT_STATUS = 'Open'; 
+0

이 쿼리를 tsql 구문으로 작성하는 방법 – qods

+0

SQL : 2003에서 윈도우 함수를 지원하는 경우 T-SQL에서 작동합니다. 문서를 통해이를 확인할 수 있어야합니다. –