选择最大记录

Selecting maximum record

当每个图表 ID 的最大图表版本为图表类型 Q 时,我希望我的查询仅计算 return 个图表点数。我希望它仅在图表类型为 Q 时计算。

(CHART_ID,CHART_TYPE,CHART_VERSION,CNT)
(CHART1,Q,11,10)
(CHART1,Q,13,20)
(CHART1,I,14,5)

SELECT
    CHART_ID,
    CHART_TYPE,
    CHART_VERSION,
    COUNT(CHART_POINTS) AS CNT
FROM CHART_TABLE
WHERE
    CHART_TYPE = 'Q' AND 
    CHART_ID = 'CHART1'
GROUP BY
    CHART_ID,
    CHART_TYPE,
    CHART_VERSION
ORDER BY
    CHART_ID ASC

查看查询

此图表 ID 应 return (CHART1,Q,13,20)。

这个有效:

WITH cte AS (
    SELECT
        CHART_ID,
        CHART_TYPE,
        CHART_VERSION,
        COUNT(CASE WHEN CHART_TYPE = 'Q' THEN 1 END) OVER
            (PARTITION BY CHART_ID, CHART_VERSION) CNT,
        ROW_NUMBER() OVER (PARTITION BY CHART_ID ORDER BY CHART_VERSION DESC) rn
    FROM CHART_TABLE
)

SELECT
    CHART_ID,
    CHART_TYPE,
    CHART_VERSION,
    CNT
FROM cte
WHERE
    rn = 1 AND CHART_TYPE = 'Q'