![](/img/trans.png)
[英]SQL Query to get the Result in One Scan without using analytical function
[英]query modification without using Analytical function
任何人都可以使用分析/聚合 function 来帮助我修改下面的代码,因为我必须使用它来创建具有快速提交刷新选项的物化视图。
SELECT col1, col2
FROM ( SELECT DISTINCT table_A.column3, table_b.column4,
CASE WHEN table_b.col5 = 'A' THEN RANK() OVER (PARTITION BY table_A.col1, table_b.col5 ORDER BY table_b.col6, table_b.col7 DESC) END AS rnk_a,
CASE WHEN table_b.col5 = 'Z' THEN RANK() OVER (PARTITION BY table_A.col1, table_b.col5 ORDER BY table_b.col6 DESC, table_b.col7 DESC) END AS rnk_z
FROM table_A
INNER JOIN table_B sc ON tale_B.col4 = table_a.col3
)
WHERE (RNK_A = 1) OR (RNK_Z = 1)
*sample dataset:*
id col5 col6 col7
A1A150 A 001 20245
A1A150 A 002 20246
A1A150 A 002 20244
A1A150 Z 001 1023
A1A150 Z 002 1022
Expected resultset:
id col5 col6 col7
A1A150 A 002 20246
A1A150 Z 001 1023
**如果找到 col5 = 'A' 或 col5 = 'Z' 的多条记录,则:取 min(col6) 和 max(col7)
当找到具有相同 col5 和 diff col7 值的 loc = 'A' 或 loc = 'Z' 的多条记录时,最大逻辑不起作用。 请纠正我哪里出错了。
SELECT col1, col2 FROM ( SELECT DISTINCT table_A.column3, table_b.column4,
CASE WHEN table_b.col5 = 'A' AND table_b.col7 = (SELECT MAX(table_b.col7) FROM table_b cp1 WHERE cp1.id = table_A.col1 GROUP BY table_A.col1)THEN 1 ELSE 0 END AS rnk_a,
CASE WHEN table_b.col5 = 'Z' AND table_b.col7 = (SELECT MAX(table_b.col7) FROM table_b cp1 WHERE cp1.id = table_A.col1 GROUP BY table_A.col1)THEN 1 ELSE 0 END AS rnk_z
FROM table_A
INNER JOIN table_B sc ON tale_B.col4 = table_a.col3
)
WHERE (RNK_A = 1) OR (RNK_Z = 1)
您可以使用子查询来实现这一点 -
SELECT T1.id, T1.col5, T1.col6, T1.col7
FROM table_A T1
JOIN (SELECT id, col5, MAX(col7) col7
FROM table_B
GROUP BY id, col5) T2
ON T1.id = T2.id
AND T1.col5 = T2.col5
AND T1.col7 = T2.col7
您可以使用CASE
和ROW_NUMBER()
查询(或RANK()
,如果更适合您的用例)中的记录进行排名,然后在外部查询中进行过滤:
SELECT id, col5, col6, col7
FROM (
SELECT
t.*,
CASE col5
WHEN 'A' THEN ROW_NUMBER() OVER(PARTITION BY col5 ORDER BY col6 DESC, col7 DESC)
WHEN 'Z' THEN ROW_NUMBER() OVER(PARTITION BY col5 ORDER BY col6 ASC, col7 DESC)
END rn
FROM mytable t
) x
WHERE rn = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.