[英]SQL Joining table to itself with GROUP BY
I have one table and I want to GROUP BY it by ID but at the same time I want to create another GROUP BY with ID and DATE and then join this table to table with ID grouping.我有一张表,我想按 ID 对其进行 GROUP BY,但同时我想创建另一个带有 ID 和 DATE 的 GROUP BY,然后将此表加入到带有 ID 分组的表中。 Example code:
示例代码:
Here is how to tables are created and I want to LEFT JOIN TEMP to ORG with ID and [DATE] to get FIRST and LAST on ORG table.这是创建表的方法,我想使用 ID 和 [DATE] LEFT JOIN TEMP 到 ORG,以获得 ORG 表上的 FIRST 和 LAST。
SELECT
ID,
MIN([DATE]) AS MIN_DATE,
FROM [ORG] AS ORG
GROUP BY ID
SELECT
ID,
[DATE],
MIN(EXEC_AS_OF_TIME) AS [FIRST],
MAX(EXEC_AS_OF_TIME) AS [LAST]
FROM [ORG] AS TEMP
GROUP BY ID, [DATE]
Here is how I thought it would work, but it doesn't.这是我认为它会起作用的方式,但事实并非如此。 Where I'm going wrong here?
我哪里出错了?
SELECT
ORG.ID,
MIN([ORG.DATE]) AS MIN_DATE,
TEMP.[FIRST],
TEMP.[LAST]
FROM [ORG] AS ORG
GROUP BY ID
LEFT JOIN (
SELECT
ID,
[DATE],
MIN(EXEC_AS_OF_TIME) AS [FIRST],
MAX(EXEC_AS_OF_TIME) AS [LAST]
FROM [TEMP]
GROUP BY ID, [DATE]
) AS TEMP ON ORG.ID = TEMP.ID AND ORG.[MIN_DATE] = TEMP.[DATE]
You need to change the syntax like the below -您需要更改如下语法 -
select org.id, MIN_DATE,FIRST,LAST
from
(
SELECT ORG.ID,MIN([ORG.DATE]) AS MIN_DATE
FROM [ORG] GROUP BY ID) AS ORG
LEFT JOIN
(
SELECT ID, [DATE],
MIN(EXEC_AS_OF_TIME) AS [FIRST],MAX(EXEC_AS_OF_TIME) AS [LAST]
FROM [ORG]
GROUP BY ID, [DATE]) AS TEMP ON ORG.ID = TEMP.ID AND ORG.[MIN_DATE] = TEMP.[DATE]
You don't need such a complicated query for this.您不需要如此复杂的查询。 Just use a window function:
只需使用窗口函数:
SELECT id.*
FROM (SELECT ID, [DATE],
MIN(EXEC_AS_OF_TIME) AS [FIRST],
MAX(EXEC_AS_OF_TIME) AS [LAST],
MIN([DATE]) OVER (PARTITION BY ID) as MIN_DATE
FROM [ORG] AS TEMP
GROUP BY ID, [DATE]
) id
WHERE [DATE] = min_date;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.