通过数据库或算法比较不同日期的两个对象

时间:2014-04-19 19:21:14

标签: java mysql sql database algorithm

http://sqlfiddle.com/#!2/10418/1/0

我有一个问题是在特定日期管理某些排名图表中某些对象的排名。

我有开始日期和结束日期的数据。我想要净效果栏。我怎么做到的?它基本上是位置的变化。例如,对于A,开始日期位置为空。所以它达到了1级。所以+5。对于B,start = 4,end = 2所以4-2 = +2 / \ rise

  1. 数据库查询是一个更好的解决方案还是java代码(我确实在数据库中有数据)。

  2. 任何人都可以显示代码和查询(这是首选方式)。 (我会欣赏这两种方法或至少是策略)。如何创建NET EFFECT。

  3. 我想要展示的结果:

        RANK        NET EFFECT      object at END date      object at START date
        1           A   +5 /\           A                   C
        2           B   +2 /\           B                   D
        3           Z   +2 /\           Z                   E
        4           D   -2 \/           D                   B
        5           E   -2 \/           E                   Z
                    C   -5 \/           -                   -   
    

    更多信息:编辑 - 1

    A不在B之前.A在某个日期处于#1,而在另一个日期处于其中(在1至5之内)。开始日期和结束日期只是2个不同的日期,其中a,b,c,d,e..z有一些位置/等级编号。

    a,b,c,d,.. z无序,但只有som #number与它们排在一起。每个#number / rank + ABCD..Z组合在每个特定日期都不同。

    java Comparator将对对象进行排序。没有产生净级别上升/下降

    我拥有的示例数据:

    数据库表:

        RANK        date        object      
        1           x           A               
        2           x           B               
        3           x           Z              
        4           x           D              
        5           x           E   
    
    
        RANK        date            object
        1           y                C
        2           y                D
        3           y                E
        4           y                B
        5           y                Z
    

1 个答案:

答案 0 :(得分:2)

http://sqlfiddle.com/#!2/10418/29

  SELECT t1.topper_position
       , t0.app_store_id
       , COALESCE(t2.topper_position, 6) - COALESCE(t1.topper_position, 6) AS delta2
       , COALESCE(t1.fetch_date, t2.fetch_date) AS cur_date
    FROM (SELECT DISTINCT app_store_id
            FROM crawler_2_application_details
           WHERE topper_position <= 5
             AND fetch_date IN ('2014-04-19 19:56:24', '2014-04-18 19:56:24')
         ) AS t0
    LEFT JOIN crawler_2_application_details AS t1
      ON t1.fetch_date = '2014-04-19 19:56:24' 
     AND t0.app_store_id = t1.app_store_id 
    LEFT JOIN crawler_2_application_details AS t2
      ON t2.fetch_date = '2014-04-18 19:56:24' 
     AND t0.app_store_id = t2.app_store_id 
   ORDER BY t1.topper_position IS NULL
          , t1.topper_position
  ;