2012-08-14 3 views
0

현재 응용 프로그램 업데이터의 백엔드를 만들고 있으며 내 서버를 사용하여 모든 파일과 버전을 추적합니다.여러 ID에서 마지막 날짜 행 가져 오기

dev_version_control_files 
Columns: FileID, FileName 

dev_version_control_versions 
Columns: VersionID, FileID, Version, DateReleased, FileLocation 

파일 테이블 버전 제어에서의 모든 파일에 대해 하나 개의 레코드를 유지 :

현재 난 내 데이터베이스에 두 개의 테이블이있다. 버전 테이블은 각 파일의 모든 버전에 대해 하나의 레코드를 릴리스 날짜, 버전 번호 및 위치와 함께 보관합니다.

내가 원하는 것은 파일 테이블의 모든 파일의 마지막 레코드 (업데이트)를 얻는 것입니다. 이것은 릴리스되었을 때부터 유닉스 타임 스탬프를 보유하고있는 날짜 필드에 의해 결정되어야한다.

업데이트 요청이있을 때마다 버전 표의 모든 행을보고 싶지 않으므로 하나의 쿼리에서이 작업을 수행 할 수 있습니까?

답변

4

당신은 나에게 전체 행을 포기하지 않았다 dev_version_control_filesdev_version_control_versions

SELECT a.*, b.Version, DateReleased 
FROM dev_version_control_files a 
      INNER JOIN dev_version_control_versions b 
       on a.FileID = b.FileID 
      INNER JOIN 
      (
       SELECT FileID, MAX(DateReleased) MaxDate 
       FROM dev_version_control_versions 
       GROUP BY FileID 
      ) c ON b.FileID = c.FileID AND 
        b.DateReleased = c.MaxDate 
+0

그 덕분에 도움을 주셔서 감사합니다! – SorenA

+0

당신은 @SorenA을 환영합니다. –

4

저는 SQL 전문가는 아니지만이 방법을 사용할 수 있습니까?

SELECT f.*, v.DateReleased 
FROM dev_version_control_files f 
INNER JOIN (
    SELECT FileId, MAX(DateReleased) AS DateReleased 
    FROM dev_version_control_versions 
    GROUP BY 1) v ON f.FileID = v.FileID 

지금 (내가 어떤 구문이 꺼져있을 수 있습니다 생각) 볼 수있는 샘플 테이블에이 테스트 하겠지만, 아이디어가 ID로 versions 테이블과 그룹을에서 최대 날짜를 당겨하는 것입니다, 다음 ID의 files 테이블에 가입하십시오. 당신이 이미하고있는 일인가요? 당신을 가정

+0

이 하나 나중에 합류 먼저 각 FileID의 최대 DateReleased을 얻을 필요가, 그것도가 있지만, 매 4 개 행을 반환 단 2 였기 때문에 내가 찾던 것이 아닌가 걱정됩니다. 시험해 주셔서 감사합니다 – SorenA

+0

Gotcha - 가능한 모든 열? 나는 내가 복제 할 이유를 알고 있다고 생각한다. (쓰기 전에 SQL을 테스트해야한다.) – RocketDonkey

+0

예, 두 테이블 행의 모든 ​​필드. 그러나'versions' 테이블의 행은 최신 날짜가되어야합니다 – SorenA

1

는 두 번째 테이블에서 적어도 하나 개의 버전 기록이 있습니다

SELECT FileID, FileName, MAX(DateReleased) 
FROM dev_version_control_files 
INNER JOIN dev_version_control_versions ON FileID 
GROUP BY FileID, FileName 

이 정확한 SQL되지 않습니다, 내가 이것에 대해 갈 것입니다 방법에 대한 거친 생각입니다.

+0

필자는 필자가 필요로하는 필드를 반환하도록 수정했으며 가장 좋은 날짜의 행을 반환하지 않는다는 점을 제외하고는 완벽하게 작동합니다. 불행히도 가장 낮은 날짜를 반환합니다. 'INNER가 f.FileID, f.FileName' BY f.FileID ON GROUP을 dev_version_control_versions의 V 가입 f를 dev_version_control_files FROM DateReleased AS f.FileID, f.FileName, v.Version, v.FileLocation, MAX (v.DateReleased)을 선택 – SorenA

+0

또 다른 업데이트는 올바른 ID에 대한 올바른 날짜를 반환하지 않으며 가장 높은 ID를 반환합니다 (일부 파일은 매번 업데이트되지 않으므로 해당 ID에 대한 최신 업데이트를 얻는 것이 중요합니다) – SorenA

관련 문제