简体   繁体   English

SQL 使用 GROUP BY 将表连接到自身

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM