我正在尝试获取排名的行号。以下是查询
SELECT *
FROM (
SELECT DISTINCT TOP 100 PERCENT rank() OVER (
PARTITION BY o.panel_id
,o.combo_type_code ORDER BY row_number() OVER (
ORDER BY o.panel_id
)
) AS rank
,panel_code
FROM tbk_offer_head o
,tbk_combo_type ct
,tbk_panel p
WHERE o.panel_id = p.panel_id
AND o.combo_type_code = ct.combo_type_code
AND o.panel_id IN (
SELECT p.panel_id
FROM tbk_panel p
WHERE p.campaign_id = 7392
)
) A
WHERE A.rank = 1
ORDER BY panel_code
获取错误,窗口函数不能在另一个上下文中使用。请帮助我如何解决这个问题。
答案 0 :(得分:1)
我不知道你真正想做什么。但是你绝对应该学习使用正确的JOIN
语法。
但是没有必要嵌套函数。你的逻辑应该等同于:
row_number() over (partition by o.panel_id, o.combo_type_code
order by o.panel_id
) as rank
为什么这会使用row_number()
代替rank()
?您的原始order by
使用了row_number()
,它永远不会重复。因此,如果rank()
可以使用它,则值将是不同的,rank()
将等同于row_number()
- 即使重复panel_id
。