1

下面的查询是将标志返回为 Y ifc.LAST_UPDATED_TIMESTAMP < MAX(t.LATEST_ACTION_TIMESTAMP)

SELECT
'Y' as CAN_UPDATE, t.LATEST_ACTION_TIMESTAMP
FROM CUSTOMERS c
LEFT JOIN TRANSACTIONS t ah on (c.customer_id = t.customer_id)
WHERE
t.status_active_flag = 'Y' and  c.customer_ID ='CUST_019'
GROUP BY t.LATEST_ACTION_TIMESTAMP
HAVING c.LAST_UPDATED_TIMESTAMP < MAX(t.LATEST_ACTION_TIMESTAMP);

ORA-00979 遇到不是 GROUP BY 表达式,了解 SELECT 中的所有列都需要包含在 GROUP BY 子句中。在这种情况下如何处理标记值“Y”?

4

2 回答 2

0

列 c.LAST_UPDATED_TIMESTAMP 也需要按部分添加到分组中

GROUP BY t.LATEST_ACTION_TIMESTAMP, c.LAST_UPDATED_TIMESTAMP

这是一个带有愚蠢示例的dbfiddle

于 2022-01-05T08:26:59.313 回答
0

HAVING子句将有效地更改LEFT JOIN为 anINNER JOIN并且您可以,因为您正在获取分组依据的列的最大值并且对该列进行聚合是无关紧要的,因为每个组只有一个奇异值,然后将HAVING比较移至ON子句没有聚合的连接:

SELECT 'Y' as CAN_UPDATE,
       t.LATEST_ACTION_TIMESTAMP
FROM   CUSTOMERS c
       INNER JOIN TRANSACTIONS t
       ON (   c.customer_id = t.customer_id
          AND c.LAST_UPDATED_TIMESTAMP < t.LATEST_ACTION_TIMESTAMP
          )
WHERE  t.status_active_flag = 'Y'
AND    c.customer_id ='CUST_019'
GROUP BY t.LATEST_ACTION_TIMESTAMP;

您也可以使用DISTINCT(or UNIQUE) 子句代替GROUP BY子句。

于 2022-01-05T09:00:10.410 回答