【问题标题】:Need Help Selecting Rows With a Max Date需要帮助选择具有最大日期的行
【发布时间】:2012-09-19 19:56:57
【问题描述】:

解释

我正在开展一个项目,我的客户将文件(合同)发送给他们的客户。这些文档在来回发送时会经历几轮“事件”(例如准备、发送给客户、从客户那里收到修订、由客户签名等)。对于特定公司(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

(我用破折号强制格式化)

【问题讨论】:

    标签: mysql sql database max


    【解决方案1】:

    您确定链接问题(特别是 this answer)的答案没有完全符合您的要求吗?

    SELECT sd.* 
    FROM siteDocuments AS sd
      LEFT OUTER JOIN siteDocuments AS sd2
        ON (sd.documentId = sd2.documentId AND sd.eventDate < sd2.eventDate) 
    WHERE 
        sd2.documentId IS NULL
        and sd.documentId = 6789;
    

    我以前使用过该答案来实现您的目标。 (为了保持性能,您必须小心在大型数据集上正确设置索引,但是 - 根据您使用的 DBMS 有所不同)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      相关资源
      最近更新 更多