我想在此先感谢您的关注。感激。我正在编写一个子查询,在汇总构成收入组的详细项目之后,我需要为每个客户获得最高收入组。因此,此查询需要为每个客户获得一条记录(将需要处理关系以防止在我的主查询中重复)。以下是子查询(带有子查询,我需要将其加入我在ACCOUNT_ID上的查询(未显示)。总和的子查询有效,但随后我需要按ACCOUNT_ID和REV_CODE获取每个帐户的总金额最高的记录。
预览似乎无法正确排列,但可以看到。
ACCOUNT_ID REVENUE_CODE CHARGE_ITEM AMOUNT
1234 0210 9011 938.49
1234 0210 8294 546.00
1234 0850 3953 32.50
1234 0850 1023 12.56
1234 0360 1203 1292.98
我需要结果,但需要每个ACCOUNT_ID(而不是子查询中所有结果的TOP 1)。真的只需要ACCOUNT_ID和REVENUE_CODE1234 0210 1484.49
SELECT
RC_SUBQ.ACCOUNT_ID
,RC_SUBQ.REVENUE_CODE
,MAX(RC_SUBQ.RC_SUM)
FROM
(SELECT /* SORTED DESC ON AMOUNT. I NEED THE TOP RECORD FOR EACH ACCOUNT_ID */
HTR.ACCOUNT_ID
,HTR.REVENUE_CODE
,SUM(AMOUNT) AS 'RC_SUM'
FROM TRANSACTIONS HTR
GROUP BY HTR.HSP_ACCOUNT_ID,
HTR.REVENUE_CODE
ORDER BY HTR.ACCOUNT_ID,SUM(AMOUNT) DESC
) RC_SUBQ
GROUP BY
RC_SUBQ.HSP_ACCOUNT_ID
,RC_SUBQ.REVENUE_CODE
您可以使用ROW_NUMBER()
和窗口函数PARTITION BY
来枚举多个和。
ROW_NUMBER() OVER (PARTITION BY HTR.ACCOUNT_ID, HTR.REVENUE_CODE ORDER BY RC_SUM DESC)
所以,遵循这些原则:
(SELECT /* SORTED DESC ON AMOUNT. I NEED THE TOP RECORD FOR EACH ACCOUNT_ID */
ROW_NUMBER() OVER (PARTITION BY HTR.ACCOUNT_ID, HTR.REVENUE_CODE ORDER BY RC_SUM DESC)
HTR.ACCOUNT_ID
,HTR.REVENUE_CODE
,SUM(AMOUNT) AS 'RC_SUM'
FROM TRANSACTIONS HTR
GROUP BY HTR.HSP_ACCOUNT_ID,
HTR.REVENUE_CODE
ORDER BY HTR.ACCOUNT_ID,SUM(AMOUNT) DESC
) RC_SUBQ