首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL将表与组连接到其自身

问SQL将表与组连接到其自身
EN

Stack Overflow用户
提问于 2020-09-16 07:43:35
回答 2查看 246关注 0票数 0

我有一个表,我想按它按ID分组,但同时,我想用ID和日期创建另一个组,然后用ID分组将这个表连接到表中。示例代码:

下面是如何创建表,我希望让JOIN使用ID和日期来获得ORG表上的第一个和最后一个。

代码语言:javascript
复制
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]

我是这么想的,但事实并非如此。我哪里出问题了?

代码语言:javascript
复制
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]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-16 07:47:28

你需要修改语法如下-

代码语言:javascript
复制
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]
票数 0
EN

Stack Overflow用户

发布于 2020-09-16 11:37:47

您不需要对此进行如此复杂的查询。只需使用窗口函数:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63915348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档