MySQL - объединение вопросов и ответов от нескольких транзакций - PullRequest
1 голос
/ 30 марта 2009

У меня есть следующие таблицы в базе данных, которые я использую для хранения результатов опросов:

alt text

Каждый раз, когда я разговариваю с кем-то в магазине (читай Магазин), я создаю новую транзакцию с датой / временем (tblTransaction.Created). С каждой транзакцией может быть связано много ответов на вопросы.

Моя проблема заключается в том, что обе транзакции могут содержать разные ответы на один и тот же вопрос, и я пытаюсь создать запрос / процедуру SQL, чтобы возвращать только самые последние ответы на вопрос для данного хранилища.

Вот пример:

Я разговариваю с кем-то в Some Shop Plc. и создайте транзакцию 01.01.09 (идентификатор транзакции 1). В этой транзакции я спрашиваю Вопросы ID 1 и 2. Затем 10.10.09 я снова говорю с ними, создавая новую транзакцию (ID транзакции 2), и отвечаю на вопросы 2 и 3.

Я хочу показать список последних ответов; Вопрос 1 из первой транзакции и вопросы 2 и 3 из второй транзакции.

1 Ответ

0 голосов
/ 30 марта 2009
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
          )

Вы также можете сделать это LEFT OUTER, присоединившись к подзапросу по тем же критериям, что и в предложении WHERE, и найдя в нем значение NULL, или вы можете удалить TransactionID из подзапроса, используя MAX () для CreatedDate, и посмотреть для совпадения с ВНУТРЕННИМ СОЕДИНЕНИЕМ.

Имейте в виду, что это может не действовать так, как вы ожидаете, если у вас есть несколько транзакций для одного магазина с одной и той же датой создания. Вам может потребоваться добавить дополнительные критерии в зависимости от ваших бизнес-правил в этой ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...