假设有表
CREATE TABLE Fact_Sale_Profit (
pid number(6),
storeid number(6),
cid number(8),
tdate date,
sale number(8),
profit number(8)
PRIMARY KEY (pid, storeid, cid, tdate)
);给定一个tdate比如:tdate = '2009-12-02' ,有没有办法通过SQL语句得到sale值前5大的pid?
十分感谢!

解决方案 »

  1.   

    select pid from (select pid from Fact_Sale_Profit order by sale desc) where rownum <= 5;
      

  2.   

    select pid from (select pid from Fact_Sale_Profit where tdate = '2009-12-02' order by sale desc) where rownum <= 5;
      

  3.   

    给定一个tdate的目的是什么?
      

  4.   

    可能我没有描述准确,销量前5指的是当日累计的,即同一个tdate,一个pid可能会有多次销售,所以应该加上sum(sale),另外转换成date型数值要使用函数TO_DATE(). 不过这是我的责任。
    谢谢#2!#3:加日期tdate是想知道特定时间的top 5完整的code:select pid 
    from (select pid, sum(sale) as sumSale from Fact_Sale_Profit where tdate = TO_DATE('2009-12-02', 'yyyy-mm-dd') group by pid order by sumSale desc) 
    where rownum <= 5;