表:a
字段:ID ,name (姓名) ,k_time (日期时间),score(分数)
数据如下:
0001,小李,2003-11-05 06:21:19 ,67
0001,小李,2003-10-05 06:21:19 ,80
0002,小二,2003-10-05 06:21:19 ,80
0002,小二,2003-10-05 06:21:19 ,80
0002,小二,2003-10-05 06:21:19 ,50
0003,小三,2003-10-05 06:21:19 ,50
0003,小三,2003-10-05 06:21:19 ,90
0003,小三,2003-10-05 06:21:19 ,80
0004,小四,2003-10-05 06:21:19 ,66
问题一:我想根据ID 来统计总分前3名的有哪些人,SQL 怎么写呢?
问题二: 有什么方法可以根据当前系统时间来判断,当前是星期几呢?我想在每周星期5做一次统计,SQL 怎么写呢?

解决方案 »

  1.   

    问题一:select  * from 
    (select  ID ,name  ,k_time,sum(score) score from a)
    where rownum<=3
    order by score;
     
    问题二:你可以建立一个JOB,每个星期五执行
    不过还是给出当前星期几的SQL:SELECT CASE WHEN to_char(sysdate,'D')='1' THEN 7 ELSE TO_NUMBER(TO_CHAR(SYSDATE,'D'))+1 END DAY FROM DUAL
     
      

  2.   

    楼主可以试一下:
    问题一:
    select * from 
    (select id,max(name),max(k_time),sum(score) total from score
    group by id order by total desc) 
    where rownum<=3;
    问题二:
    建立job,星期几用下面语句判断
    select to_char(sysdate,'day') from dual;###########################################
    SQL> select * from score;        ID NAME                 K_TIME              SCORE
    ---------- -------------------- -------------- ----------
             1 小李                 05-11月-03             67
             1 小李                 05-10月-03             80
             2 小二                 05-10月-03             80
             2 小二                 05-10月-03             80
             2 小二                 05-10月-03             50
             3 小三                 05-10月-03             50
             3 小三                 05-10月-03             90
             3 小三                 05-10月-03             80
             4 小四                 05-10月-03             66已选择9行。SQL> select * from 
      2  (select id,max(name),max(k_time),sum(score) total from score
      3  group by id order by total desc) 
      4  where rownum<=3;        ID MAX(NAME)            MAX(K_TIME)         TOTAL
    ---------- -------------------- -------------- ----------
             3 小三                 05-10月-03            220
             2 小二                 05-10月-03            210
             1 小李                 05-11月-03            147SQL> select to_char(sysdate,'day') from dual;TO_CHAR(S
    ---------
    星期三
      

  3.   

    问题1:
    SELECT * FROM (SELECT ID,NAME,SUM(SCORE) FROM A GROUP BY SCORE ORDER BY SUM(SCORE) DESC 
    ) WHERE ROWNUM<=3
      

  4.   

    SELECT * FROM        
    (SELECT ID , NAME , COUNT(ID) CNT
    FROM a
    GROUP BY ID
    ORDER BY CNT DESC) WHERE ROWNUM <=3;