2014-06-21 5 views
0

G/L 테이블을 가져 와서 다른 두 테이블간에 조인을 시도하면 명세서의 각 G/L에 대한 최신 항목이 표시되지만 손실됩니다 시도해 볼만한 것.쿼리 결과의 최신 날짜를 반환하십시오.

SELECT 
    GLACCOUNT.GLACODE, 
    GLACCOUNT.GLADESC, 
    GLACCOUNT.GLATYPE, 
    GLACCOUNT.GLAACTIVE, 
    GLENTHDR.GLEHENTDATE, 
    GLENTTRL.GLETREM, 
    GLENTHDR.GLEHUSER, 
    GLENTHDR.GLEHPP 
FROM GLACCOUNT 
INNER JOIN GLENTTRL 
    ON GLACCOUNT.GLACODE = GLENTTRL.GLETCODE 
INNER JOIN GLENTHDR 
    ON GLENTTRL.GLETXACT = GLENTHDR.GLEHXACT 

지금 내가 원하는 것은 GLACCOUNT.GLACODE을 결합하고 다만 각 (GLACODE)의 최신 GLENTHDR.GLEHPP 항목을 표시합니다. 어떤 연구를하면서 WHERE 구문을 할 수 있다고 생각했지만 결합 방법을 모르겠습니다. 결과에 대해 하위 쿼리를 수행해야합니까? 여기 멍청한 녀석 인 것에 대해 유감스럽게 생각합니다. 나는 이것이 단순한 것이라고 확신한다. 감사.

+0

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

답변

0

사용중인 데이터베이스가 확실하지 않지만 아래 쿼리 구문은 표준 SQL입니다. 각 GLENTHDR 레코드 그룹의 최신 날짜를 GLETXACT으로 쿼리하는 것이 좋습니다. 그런 다음 외부 쿼리를 조인합니다.

SELECT 
    GLACCOUNT.GLACODE, 
    GLACCOUNT.GLADESC, 
    GLACCOUNT.GLATYPE, 
    GLACCOUNT.GLAACTIVE, 
    GLENTHDR.GLEHENTDATE, 
    GLENTTRL.GLETREM, 
    GLENTHDR.GLEHUSER, 
    GLENTHDR.GLEHPP 
FROM GLACCOUNT 
INNER JOIN GLENTTRL 
    ON GLACCOUNT.GLACODE = GLENTTRL.GLETCODE 
INNER JOIN (
    SELECT 
     GLETXACT, 
     GLEHUSER, 
     GLEHPP, 
     MAX(GLEHENDATE) AS GLEHENDATE 
    FROM GLENTHDR 
    GROUP BY GLETXACT, GLEHUSER, GLEHPP 
) GLENTHDR 
    ON GLENTTRL.GLETXACT = GLENTHDR.GLEHXACT 
0

각 보조 테이블의 마지막 트랜잭션을 찾으려면 하위 쿼리가 필요합니다. 아래의 가장 내부 하위 쿼리를 보면 그렇게 나쁘지 않습니다. 가장 내부의 하위 쿼리는 보조 테이블에 대한 각 GLETCODE의 마지막 ID (실명을 모르는 경우)를 가져옵니다. 나는 이것을 MAXmytablename이라고 부른다. 그런 다음 다시 보조 테이블에 조인하여 해당 마지막 행을 가져옵니다. 그런 다음 마지막 행의 GLETCODE에 GLACCOUNT.GLETCODE를 조인합니다.

SELECT  GLACCOUNT.GLACODE, 
GLACCOUNT.GLADESC, 
GLACCOUNT.GLATYPE, 
GLACCOUNT.GLAACTIVE, 
GLENTHDR.GLEHENTDATE, 
GLENTTRL.GLETREM, 
GLENTHDR.GLEHUSER, 
GLENTHDR.GLEHPP 
FROM GLACCOUNT 
INNER JOIN (SELECT GLENTTRL.GLETCODE, 
      GLENTTRL.GLETREM 
      FROM GLENTTRL 
      JOIN (SELECT MAX(ID) MAXID, 
       GLETCODE 
       FROM GLENTTRL 
       GROUP BY GLETCODE) AS MAXGLENTTRL 
     ON MAXGLENTTRL.MAXID = GLENTTRL.ID) AS GLENTTRL 
ON GLACCOUNT.GLETCODE = GLENTTRL.GLETCODE 
INNER JOIN (SELECT GLENTHDR.GLETCODE, 
       GLENTHDR.GLEHUSER, 
       GLENTHDR.GLEHPP, 
       GLENTHDR.GLEHENTDATE 
       FROM GLENTHDR 
       JOIN (SELECT MAX(ID) MAXID, 
        GLETCODE 
        FROM GLENTHDR 
        GROUP BY GLETCODE) AS MAXGLENTHDR 
       ON MAXGLENTHDR.MAXID = GLENTHDR.ID) AS GLENTHDR 
ON GLACCOUNT.GLETCODE = GLENTHDR.GLETCODE