http://sqlfiddle.com/#!2/10418/1/0
我有一个问题是在特定日期管理某些排名图表中某些对象的排名。
我有开始日期和结束日期的数据。我想要净效果栏。我怎么做到的?它基本上是位置的变化。例如,对于A,开始日期位置为空。所以它达到了1级。所以+5。对于B,start = 4,end = 2所以4-2 = +2 / \ rise
数据库查询是一个更好的解决方案还是java代码(我确实在数据库中有数据)。
任何人都可以显示代码和查询(这是首选方式)。 (我会欣赏这两种方法或至少是策略)。如何创建NET EFFECT。
我想要展示的结果:
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
答案 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
;