如何在teradata中使用Qualify row_number
问题描述:
你好吗?如何在teradata中使用Qualify row_number
我从来没有使用限定row_number()/ rank(),我有一些问题。
我在Teradata的尝试此查询:
select sit_site_id
, count(distinct shp_shipment_id)
from WHOWNER.BT_SHP_SHIPMENTS
group by sit_site_id
QUALIFY RANK() OVER (PARTITION BY sit_site_id
ORDER BY count(distinct shp_shipment_id)) = 3
但结果是:“在表中没有可用的数据”。
我想要得到更多shp_shipment_id的前3个sit_site_id值。
我的错误在哪里?
谢谢!
答
我希望有更多shp_shipment_id
如果是这样拿到第3个sit_site_id值,那么你就需要使用RANK()/ ROW_NUMBER()。相反,你可以使用TOP。您的查询应该是象下面这样:
select TOP 3 sit_site_id
, count(distinct shp_shipment_id) shp_shipment_id_cnt
from WHOWNER.BT_SHP_SHIPMENTS
group by sit_site_id
order by shp_shipment_id_cnt DESC;
答
如果你想使用qualify
这一点,那么你可以做:
select sit_site_id, count(distinct shp_shipment_id)
from WHOWNER.BT_SHP_SHIPMENTS
group by sit_site_id
qualify row_number() over (order by count(distinct shp_shipment_id) desc) <= 3;
不过,我会建议top
在@克拉克的回答。
GROUP BY按每个site_id返回一行,然后尝试获取第三行,当然不返回任何行。你可能想要像'QUALIFY RANK()OVER( ORDER BY count(distinct shp_shipment_id)) dnoeth
每个'shipment_id'你需要排名前3的'site_id'吗?请分享样本数据和期望的输出。 – zarruq