Oracle 作为聚合函数MIN()的结果引用后,列名无效

Oracle 作为聚合函数MIN()的结果引用后,列名无效,oracle,aggregate-functions,min,ora-00904,Oracle,Aggregate Functions,Min,Ora 00904,上面的查询从表CUST\u DETAILS中选择所有列,其中最早的值位于CREATION\u TIMESTAMP列中 知道为什么MIN\u TIMESTAMP会遇到无效标识符吗 以下是应显示的列: SELECT cust_detl.*, MIN(CREATION_TIMESTAMP) OVER (PARTITION BY CUST_ID) AS MIN_TIMESTAMP FROM CUST_DETAILS cust_detl WHERE CREATION_TIMESTAMP=M

上面的查询从表
CUST\u DETAILS
中选择所有列,其中最早的值位于
CREATION\u TIMESTAMP
列中

知道为什么
MIN\u TIMESTAMP
会遇到无效标识符吗

以下是应显示的列:

SELECT cust_detl.*, 
       MIN(CREATION_TIMESTAMP) OVER (PARTITION BY CUST_ID) AS MIN_TIMESTAMP
FROM CUST_DETAILS cust_detl
WHERE CREATION_TIMESTAMP=MIN_TIMESTAMP;
我还需要选择
CREATION\u TIMESTAMP
列,只有那些具有最小时间戳的列才会被选择。问题是不允许使用
nextval
的序列。我需要查询中的序列,因为此语句将用于以后的
INSERT
SELECT…INSERT INTO


PK需要增加

列名无效,首先使用where条件过滤数据,然后在过滤的数据上使用select语句。在使用它之前,需要将其放入子查询中

SELECT
  CUSTOMER_DTL_SEQ.nextval,
  CUST_ID
  CUS_REF_ID
  CUST_NAME
  CUST_ADDRESS
  CREATION_TIMESTAMP
FROM
(
  CUSTOMER_DTL_SEQ.nextval,
   cust_detl.CUST_ID,
   cust_detl.CUST_REF_ID,
   cust_detl.CUST_NAME,
   cust_detl.CUST_ADDRESS,
   cust_detl.CREATION_TIMESTAMP,
    MIN(CREATION_TIMESTAMP) OVER (PARTITION BY CUST_ID) AS min_timestamp
    FROM cust_details cust_detl
  )
 WHERE CREATION_TIMESTAMP = min_timestamp;
更新:我不知道您的表中有哪些列,但如果您只需要特定列,则查询如下(假设您只需要选择列表中的cust_id、column1、column2和column3列)

如果仍然没有得到解决方案,post将显示表中的列列表和预期输出

Update2:在外部查询中获取光标,此查询应该可以正常工作

SELECT cust_id,
       column1,
       column2,
       column3
  FROM (SELECT cust_detl.cust_id,
               cust_detl.column1,
               cust_detl.column2,
               cust_detl.column3,
               cust_detl.creation_timestamp,
               MIN(creation_timestamp) over(PARTITION BY cust_id) AS min_timestamp
          FROM cust_details cust_detl)
 WHERE creation_timestamp = min_timestamp;

我尝试使用
cust_detl.
,它返回多条记录,但其中一条记录的时间戳为min。如果没有它,
CREATION\u TIMESTAMP
列将无效。我是否可以修复只选择了某些列而不是选择所有列的问题?@user2102665:我在这里为您提供了解决方案。但是你没有注意。您必须在内部选择列表中添加列名,以便在子查询外部可见。您的select中缺少它,您没有向我们显示它。@San,添加了受尊重的列和预期结果。这几乎是的重复项-如果OP的焦点在工作查询上,则应将其作为重复项关闭;但是,如果OP的重点是为什么查询不起作用,那么答案应该集中在这个问题上,这不是重复。
SELECT cust_id,
       column1,
       column2,
       column3
  FROM (SELECT cust_detl.cust_id,
               cust_detl.column1,
               cust_detl.column2,
               cust_detl.column3,
               cust_detl.creation_timestamp,
               MIN(creation_timestamp) over(PARTITION BY cust_id) AS min_timestamp
          FROM cust_details cust_detl)
 WHERE creation_timestamp = min_timestamp;
SELECT customer_dtl_seq.nextval,
       cust_id,
       cus_ref_id, 
       cust_name,
       cust_address,
       creation_timestamp
  FROM (SELECT cust_detl.cust_id,
               cust_detl.cust_ref_id,
               cust_detl.cust_name,
               cust_detl.cust_address,
               cust_detl.creation_timestamp,
               MIN(creation_timestamp) over(PARTITION BY cust_id) AS min_timestamp
          FROM cust_details cust_detl)
 WHERE creation_timestamp = min_timestamp;