我在数据库中有以下表格,我用它来存储调查结果:
每当我在商店(读店)与某人交谈时,我都会创建一个新的交易,其中包含日期/时间(tblTransaction.Created)。每个交易都可以有许多与之相关的问题答案。
我的问题是,2个事务可能都包含对同一个问题的不同答案,我正在尝试创建一个SQL查询/过程,仅返回给定商店的最新问题答案。
以下是一个例子:
我在Some Shop Plc与某人交谈。并在01/01/09(事务ID 1)上创建一个事务。在这个交易中,我问问题1和2.然后在10/01/09我再次与他们交谈,创建一个新的交易(交易ID 2)并回答问题2和3。
我希望能够显示最新答案列表;第一笔交易的问题1和第二笔交易的问题2和3。
答案 0 :(得分: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
)
您也可以通过LEFT OUTER以与WHERE子句相同的条件加入子查询并在其中查找NULL值或者您可以从子查询中删除TransactionID并在CreatedDate上使用MAX()并查看与INNER JOIN匹配。
请注意,如果同一商店的多个交易具有相同的创建日期,则可能无法满足您的预期效果。您可能需要根据您在此情况下的业务规则添加其他条件。