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 最小值和最大值 StartDate
和 EndDate
,如下所示:
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
我有 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 最小值和最大值 StartDate
和 EndDate
,如下所示:
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