2014-07-17 3 views
-1

동일한 번호 (91132310000)와 다른 결제 시스템 (A 및 B)에 대해 2 개의 항목이 있고 시작 날짜가 동일한 시나리오가 있습니다 (07-JUL- 03)하지만 다른 종료 날짜 그래서 최대 시작 날짜 행을 선택해야합니다. 테이블 아래sql 쿼리를 사용하여 열 값을 기준으로 거의 비슷한 행을 선택하십시오.

는 중복 행 그래서 쿼리 미만이 사용하고

BILLING ACCOUNT  NUM   START_DATE END_DATE STATUS 
A  AA54340152 91132310000 07-JUL-03  W 
B  AA54340152 91132310000 07-JUL-03 31-DEC-99 W 
B  AA54340152 91132310001 07-JUL-03 31-DEC-99 W 
B  AA54340152 91132310002 07-JUL-03 31-DEC-99 W 

를 제거하는 출력 .. 그러나 그것은 나에게 그렇게 내가 원하는 NUM '91132310000'에 대한 A와 B 결제 시스템을 하나 개의 항목을 제공합니다 A 청구 시스템 만 입력하십시오. 마찬가지로 동일한 NUM에 대한 청구 시스템이 B와 C 인 경우 B 청구 시스템 행을 선택하는 조건이 하나 더 있습니다. 이것들은 SQL에서 스크립트를 작성할 수없는 두 가지 조건입니다. 출력에서

SELECT * FROM number_data A WHERE START_DATE = (SELECT MAX(START_DATE) FROM number_data B WHERE A.NUM=B.NUM' 

발췌문 :

BILLING ACCOUNT  NUM   START_DATE END_DATE STATUS 
A  AA54340152 91132310000 07-JUL-03  W 
B  AA54340152 91132310000 07-JUL-03 31-DEC-99 W 
+2

이 'MySQL'또는 'SQL Server'입니까? –

답변

0

당신은 문에 의해 그룹을 사용해야합니다.

Select Num, Max(Start_Date) 
From number_data 
Group By Num 

이 쿼리는 number_data에있는 모든 별개의 '민'의 목록을 반환 이것이 당신이 얻을이 쿼리를 사용하여 SQL 서버에 대한 경우 최대 시작일에게

0
SELECT * FROM 
(
    SELECT *, 
     RANK() OVER (PARTITION BY NUM ORDER BY BILLING) AS Rk 
    FROM @Billing 
) d 
WHERE d.Rk = 1 

을 선택합니다 각 번호별로 가장 낮은 청구 기록입니다.

관련 문제