排行榜的问题,上升及下降排名如何设置?现在有一个问题,我有一个榜单数据,每天都会排出来一次
譬如,表table1account | value1 | Order
------------------------
bbb        30        1 
ccc        15        2
aaa        10        3
第二天又会排出一个名次,还是表table1,即把昨天覆盖了account | value1 | Order
------------------------
aaa        40        1
bbb        30        2 
ccc        15        3
因为account每天消费的值不一样,所以Order会变化。
***********************************************
******************* 问题来了 ******************
***********************************************
我如何得到account上升的名次?account | OrderChanged
------------------------
aaa       +2
bbb       -1 
ccc       -1
因为我每次排榜的时候都会将之前的覆盖,所以以前的没有了。所以我的想法是:在table1中加一个字段,然后通过临时表来保存上一个表,最后计算出来。
不知道有没有更好的方法,如果有,请不吝赐教!也就是我第二天排出来的应该是这样:account | value1 | Order | OrderChanged
-----------------------------------------
aaa        40        1         +2
bbb        30        2         -1
ccc        15        3         -1
因为我之前排的时候已经有LEFT OUTER JOIN了。怎么再JOIN进去?INSERT database.bx_top_level
SELECT t0.ID, t0.Value1, t1.Name, t2.Name, @nRankOrder:=@nRankOrder + 1 FROM database.account AS t0
LEFT OUTER JOIN (database.factroy_info AS t1, database.address_info AS t2) ON (t1.FactroyID=t0.FactroyID AND t2.AddressID=t0.AddressID)
ORDER BY Value1 Desc;t1.Name,t2.Name在Account中没有,而是一个外键到factroy_info和address_info中。

解决方案 »

  1.   

    表设计改为如下。cw     |account | value1 | Order
    -----------------------------
    201112  bbb 30 1  
    201112  ccc 15 2
    201112  aaa 10 3
    201113  aaa 40 1
    201113  bbb 30 2  
    201113  ccc 15 3
    select a.*,a.Order-b.Order
    from 表table1 a  ,表table1 b
    where a.cw=201113 and b.cw=201112
      

  2.   

    你的意思是按照ACMAIN_CHM的想法做就行?
      

  3.   

    我测试了一下,表确实是按照你设计的,但是你这个SQL语句不行啊。
    他出来的结果集是MxN。放到一个表中好像没办法做啊。想了半天没想到合适的SQL!!!!!!
      

  4.   

    你的表结构及记录 是什么 贴建表及插入记录的SQL,及要求结果出来看看
      

  5.   

    表结构就是  ACMAIN_CHM  所说的这样。所出来的结果就是select a.*,a.Order-b.Order
    from 表table1 a  ,表table1 b
    where a.cw=201113 and b.cw=201112
    所表现出来的语义,但是不知道为什么,貌似语法有问题,出来的集合是一个MxN的集合。
      

  6.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  7.   

    select a.*,b.acOrder-a.acOrder as rank_d_value
    from TEST_GAO a  ,TEST_GAO b
    where a.cw=201113 and b.cw=201112 and  b.account =a.account