2009-03-30 5 views
1

나는 내가 설문 조사의 결과를 저장하는 데 사용하고 있음을 데이터베이스 내에서 다음과 같은 테이블이 있습니다MySQL을 - 여러 트랜잭션에서 질문과 답변을 결합

alt text

나는 가게에서 누군가에게 말할 때마다 (상점 읽기), 나는 날짜/시간 (tblTransaction.Created)와 함께 새로운 트랜잭션을 생성합니다. 각 거래에는 관련된 많은 질문 답변이있을 수 있습니다.

내 문제는 두 트랜잭션이 모두 같은 질문에 대한 다른 대답을 포함 할 수 있으며 SQL 쿼리/프로 시저를 만들어 특정 저장소에 대한 최신 질문 대답 만 반환하려고한다는 것입니다.

나는 일부 공장 Plc에서 누군가와 이야기 :

다음은 예입니다. 01/01/09 (거래 ID 1)에 거래를 생성하십시오. 이 거래에서는 QuestionIDs 1과 2를 요청합니다. 그런 다음 10/01/09에 새 거래 (거래 ID 2)를 만들고 질문 2와 3에 답변합니다.

최근 답변 목록보기; 첫 번째 거래의 질문 1과 두 번째 거래의 질문 2와 3

답변

0
SELECT 
    S.StoreID, 
    S.BranchName, 
    A.QuestionID, 
    T.Created, 
    A.* 
FROM 
    tblStore S 
INNER JOIN tblTransaction T ON 
    T.StoreID = S.StoreID 
INNER JOIN tblAnswer A ON 
    A.TransactionID = T.TransactionID AND 
    A.StoreID = S.StoreID 
WHERE NOT EXISTS 
      (
      SELECT 
       T2.StoreID, 
       A2.QuestionID, 
       T2.TransactionID, 
       T2.CreatedDate 
      FROM 
       tblTransaction T2 
      INNER JOIN tblAnswer A2 ON 
       A2.TransactionID = T2.TransactionID AND 
       A2.StoreID = T2.StoreID 
      WHERE 
       T2.StoreID = T.StoreID AND 
       A2.QuestionID = A.QuestionID AND 
       T2.CreatedDate > T.CreatedDate 
     ) 

(당신은 또한 WHERE 절과의 NULL 값을 찾고 같은 기준에 서브 쿼리에 합류 LEFT OUTER하여이 작업을 수행 할 수 있습니다 또는 당신은 MAX를 사용하는 하위 쿼리에서는 TransactionId를 제거 할 수 있습니다)에 CreatedDate를 사용하고 INNER JOIN과 일치하는 방식을 찾으십시오.

동일한 생성 날짜의 동일한 상점에 ​​대해 여러 트랜잭션이있는 경우 예상대로 작동하지 않을 수 있습니다. 해당 상황에 대한 비즈니스 규칙에 따라 추가 기준을 추가해야 할 수도 있습니다.

관련 문제