选择最大记录
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'
当每个图表 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'