2012-08-10 2 views
1

고유 한 documentid-physician-patient 트리플릿의 최신 값을 반환하는 스크립트를 작성하려고합니다. 한 번에 한 컬럼 씩만 작동하는 그룹을 제외하고는 그룹 별 구문과 유사하게 동작하는 스크립트가 필요합니다. 가장 최근의 유일한 삼중 항만에 대한 날짜 및 상태 정보가 필요합니다. 저에게 도움이 필요하신 것을 알려주십시오. 여기에 현재 매우 베어, 문은 다음과 같습니다SQL - Group 고유 한 열 조합으로

SELECT 
     TransmissionSend.CreateTimestamp, 
     TransmissionSendItem.Status, 
     TransmissionSendItem.PhysicianId, 
     TransmissionSendItem.DocumentIdDisplay, 
     Utility.SqlFunctions_NdnListToAccountList(TransmissionSendItem.NdocNum) AS AccountNum 
    FROM 
     Interface_SFAX.TransmissionSend, 
     Interface_SFAX.TransmissionSendItem 
    WHERE 
     TransmissionSend.ID = TransmissionSendItem.childsub --I don't know exactly what this does, I did not write this script. It must stay here though for the exact results. 

    ORDER BY TransmissionSend.CreateTimestamp DESC -- In the end, each latest result of the unique triplet will be ordered from most recent to oldest in return 

내 질문에, 다시, 어떻게 최신 각 의사 ID의 상태, 문서 ID 및 계좌 번호 조합에 대한 결과를 제한 할 수 있습니까?

+0

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

+0

정말로 묵시적 결합 (쉼표로 구분 된'FROM' 절)을 사용해서는 안됩니다. 이것은 SQL 반 패턴으로 간주됩니다. 당신은 (당신이 여기있는 것처럼) 정규 조인만으로도 괜찮지 만, 다른 유형을 시도 할 때 흥미로운 일이 있습니다. 'WHERE' 절은 검색어가 전송 된 항목들뿐만 아니라 '전송 된 항목'에 연결된 전송을 반환하지 않도록합니다. 이것은 SQL의 핵심 부분이므로 더 자세히 설명 할 수있는 몇 권의 책을 선택하는 것이 좋습니다. –

답변

4

먼저 documentid GROUP BY 문서 ID로 MAX (날짜)를 선택한 다음 테이블에서 내부 결합과 같은 첫 번째 선택 결과로 모든 데이터를 선택합니다.

SELECT table.additionalData, J.id, J.date 
FROM table 
INNER JOIN (SELECT id, MAX(date) AS date 
      FROM table GROUP BY id) AS J 
ON J.id = table.id 
AND J.date /* this is the max date */ = table.date 
+0

'date' (그리고'table')을 제외하고는 모든 RDBMS에서 (내가 알고있는 것만 큼) 예약어로 사용되므로 피해야합니다 (허용되는 경우). 어떤 경우이든 더 자세한 열 이름을 사용해야합니다. –

+1

사실이 이름이 가장 명확한 예입니다. :-) (예약 된 키워드는 이스케이프 처리 될 수 있습니다.) –