【问题标题】:Join two queries from the same table - SELECT DISTINCT?加入来自同一个表的两个查询 - SELECT DISTINCT?
【发布时间】:2013-10-25 20:33:53
【问题描述】:

我有两个由AUTO_KEY 字段链接的表,我从一个表中检索数字(id),从另一个表中我通过数字(id)获得多个状态,每个状态都有一个与之关联的日期。 我需要将结果限制为所有数字(id)和相应状态的最大/最新日期

SELECT
    OPERATION.NUMBER, 
    STATUS.STATUS, 
    Max(STATUS.DATE)

FROM 
   STATUS, 
   OPERATION

WHERE 
OPERATION.AUTO_KEY = STATUS.AUTO_KEY 

从这里

Number  Status    Date
-----------------------------
1       A       10/20/13
1       B       10/15/13
2       A       10/10/13
2       AX      10/05/13
2       AD      10/03/13
3       DD      10/03/13

结果应该是

Number  Status    Date
-----------------------------
1       A       10/20/13
2       A       10/10/13
3       DD      10/03/13

提前致谢

【问题讨论】:

  • 表格格式的样本数据和预期输出有助于更好地理解问题。
  • 样本数据应该在问题中......而不是在 cmets :)
  • 我刚刚添加了一个示例。谢谢您的帮助

标签: sql oracle select distinct


【解决方案1】:

您可以使用 CTEROW_NUMBER() 函数。也请使用Table JOIN 代替 FROM STATUS, OPERATION

;With CTE AS (
   SELECT O.NUMBER, S.STATUS, S.DATE, 
          ROW_NUMBER() OVER (ORDER BY S.DATE DESC) RN
   FROM  STATUS S JOIN OPERATION O
           ON O.AUTO_KEY = S.AUTO_KEY 
)
SELECT NUMBER, STATUS, DATE
FROM CTE
WHERE RN = 1
ORDER BY NUMBER

【讨论】:

  • 谢谢。我正在使用 Excel 查询 Oracle 数据库。它似乎不适用于 Oracle
【解决方案2】:
SELECT OPERATION.CNUMBER, 
       STATUS.STATUS, 
       STATUS.CDATE
FROM STATUS, 
     OPERATION
WHERE OPERATION.AUTO_KEY = STATUS.AUTO_KEY 
AND STATUS.CDATE = (
SELECT MAX(STATUS.CDATE) MAX_DATE
FROM STATUS, 
      OPERATION
WHERE OPERATION.AUTO_KEY = STATUS.AUTO_KEY 
GROUP BY OPERATION.CNUMBER )

【讨论】:

  • 谢谢。我正在使用 Excel 查询 Oracle 数据库。我收到一条错误消息。缺少右括号,我检查了我有他们所有
  • 我在这里的测试环境中运行了查询,结果很好。顺便说一下,列名不能是 NUMBER 或 DATE。我在回答中解决了这个问题。
  • 为了更详细地阐述我之前的评论。我对 oracle DB 运行了查询(不使用 Excel)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 2013-11-22
  • 2014-05-01
  • 2013-01-16
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
相关资源
最近更新 更多