解释
我正在做一个项目,我的客户将文件(合同)发送给他们的客户。这些文档在来回发送时会经历几轮“事件”(例如准备、发送给客户、从客户那里收到修订、由客户签名等)。对于特定公司(companyID 123456),我正在尝试提取每个文档的最新事件。因此,下面的示例查询可能会返回 5 个不同的文档,每个文档可能有 4 个不同的事件经历。在示例结果中,我将其简化为单个文档(documentId 6789)。
鉴于下面的示例结果,我希望得到第三行。所有行都针对单个文档,并且该文档具有最近的日期。但是,如下所示,我得到了四个。
如果我按 documentID 分组,那么我得到正确的日期,但我的事件和事件 ID 值不正确(转置)。我唯一的成功是将 Select 语句中的每个值包装在 Max() 函数中。当我这样做时,我会通过正确的事件获得我想要的一行。但是,文档 ID 之类的东西是错误的,因为它当然会返回最大 ID,而不是匹配的 ID。
有人可以帮我调整这个查询,以便我得到我需要的结果吗?提前致谢!
注意:我在这里找到了这个“解决方案”,但我认为它并不直接适用于我正在做的事情: Fetch the row which has the Max value for a column
询问
选择 e.eventID, e.事件, de.documentEventID, de.documentID, Max(de.eventDate) 作为事件日期, sd.公司ID, FROM siteDocuments sd LEFT JOIN 文档 d ON d.documentID = sd.documentID 左连接 documentTypes dt ON dt.documentTypeID = d.documentTypeID LEFT JOIN documentEvents de ON de.documentID = sd.documentID LEFT JOIN 事件 e ON e.eventID = de.eventID 哪里 sd.companyID = 123456 按 e.eventID 分组
EXAMPLE RESULTS
-----------------------
EventId --- Event Doc --- EventId --- documentId --- eventDate
16 -------- FakeEventA -- 135791 ------ 6789 ------- 2012-04-11 08:35:54
32 -------- FakeEventB -- 726351 ------ 6789 ------- 2012-04-11 08:56:02
24 -------- FakeEventC -- 987236 ------ 6789 ------- 2012-05-09 16:48:57 <======
81 -------- FakeEventD -- 982378 ------ 6789 ------- 2012-04-20 14:06:19
(我放入破折号以强制格式化)