0

给定显示的表格(简化):

表

我如何以最快的方式选择主表中的记录,其中“相关表”中的所有相关记录都已完成(=true)并且每个订单的最新“CompletedTimestamp”值大于/小于指定值?

如果我希望在 2013 年 8 月 20 日之前完成已完成的订单,则应返回 OrderId = 1 的单个记录。

该数据库是 MS Access,但我使用 SQL 和 ADO.NET 从另一个系统引用它。

4

1 回答 1

1

关键是用来HAVING限制你的记录而不是WHERE.

假设CompletedTimestamp在订单未完成的情况下为 NULL,您可以使用以下命令:

SELECT  m.OrderID, m.Owner, MAX(r.CompletedTimestamp) AS CompletedDate
FROM    [Main Table] m
        INNER JOIN [Related Table] r
            ON r.OrderID = m.OrderID
GROUP BY m.OrderID, m.Owner
HAVING  COUNT(r.CompletedTimeStamp) = COUNT(*)
AND     MAX(r.CompletedTimestamp) < '20130821';

由于COUNT(*)将计算所有记录,并且COUNT(CompletedTimestamp)将计算非 null CompletedTimestamps(因为COUNT(NULL)= 0),这将仅返回所有相关记录都被强制执行的订单。

最后,该声明MAX(CompletedTimestamp) < '20130821'将确保仅返回指定日期之前最大完成日期的订单。

于 2013-08-13T08:42:14.823 回答