2014-02-21 78 views
0

在下面的查询中,我尝试在字段product_id上使用分区,并在week_end日期中对其进行排序。我的问题是我们是否需要使用或rank()或某些聚合函数以便按特定列进行分区。因为下面的查询失败,如果我不使用rank()函数,但我不需要排名在我的输出。有没有什么办法可以避免聚合函数并仍然使用分区。谢谢!postgres中的窗口分区

select c.week_end,a.product_id,b.metric_id,c."week_value",c."13week_value",c."52week_value",rank() over(partition by a.product_id order by c.week_end) from 
    Product_t a,metric_t b, vin_example_unpivot c where 
    c.prod_nm = a.product_nm and 
    c."Metric" = b.metric_code 
+0

它失败了,因为分析函数的分区意味着告诉窗口函数(在您的情况下排名)何时重新启动。没有窗口函数,你正在给一个不存在的东西给一个指令,这是没有意义的。你想做什么? –

+0

你想通过product_id进行分区并按周排序?你能提供样本数据和期望的结果吗? –

回答

0

你只是想按产品ID和结束日期对结果进行排序吗?

select c.week_end, a.product_id, b.metric_id, c."week_value", c."13week_value", c."52week_value" 
from vin_example_unpivot c join 
    Product_t a 
    on c.prod_nm = a.product_nm join 
    metric_t b 
    on c."Metric" = b.metric_code 
order by product_id, week_end; 

请注意,我还修复了连接以使用正确的连接语法。