Select 最小最大值来自另一个 table

Select with min max from another table

我有 2 张桌子。

Table1 共有 20 列,全部与 class 已交付或将交付的培训相关。列包括:

ClassID
ClassName
ClassStatus
Country
Requestor

每一行都是唯一的,这意味着 ClassID 不会重复。

Table 2 显示 classes:

的开始日期时间和结束日期时间
ClassID
ClassStartDatetime
ClassEndDatetime

但是,如果class 运行 3天,它将有3行,每一行代表每一天,并有相应的开始时间和结束时间。

我想查询Table1中的所有列,加上StartDate和EndDate,其中ClassID是唯一标识。

当我 select 全部来自 Table 1,StartDatetime 的最小值,EndDatetime 的最大值使用 INNER JOIN 两个表时,我无法获得 ClassID 的唯一行。

我尝试从 select distinct 开始,这也行不通。

我不应该使用 INNER JOIN 吗?

由于 GROUP BY 子句,您无法在最终 table 中获得唯一值,该子句聚合了所有其他字段。为了解决您的问题,您可以在加入之前分别 select 最小值和最大值 StartDateEndDate,如下所示:

SELECT * 
FROM       Table1 
INNER JOIN (SELECT ClassID,
                   MIN(ClassStartDatetime),
                   MAX(ClassEndDatetime)
            FROM Table2
            GROUP BY ClassID) unique_classids
        ON Table1.ClassID = unique_classids.ClassID

只要 post 不包含所涉及的 table 的示例行,此代码就未经测试。

加入Table1前需要先按Table2分组

SELECT T1.*, minClassStartDatetime, maxClassEndDatetime
FROM Table1 T1
JOIN (
        SELECT 
            ClassID, 
            MIN(ClassStartDatetime) minClassStartDatetime, 
            MAX(ClassEndDatetime) maxClassEndDatetime
        FROM Table2
        GROUP BY ClassID
) AS T2 ON T1.ClassID = T2.ClassID