我想在sqlite3中对一天,时间表进行排名,并且缺乏一些分析功能。 下表
Day | Time
--------------------------------
2014-10-27 | 2014-10-27 08:46:48
2014-10-28 | 2014-10-28 08:02:42
2014-10-30 | 2014-10-29 08:35:11
2014-10-30 | 2014-10-30 08:20:35
2014-10-31 | 2014-10-31 08:18:13
2014-10-31 | 2014-10-31 18:12:06
2014-11-03 | 2014-11-03 10:35:45
2014-11-03 | 2014-11-04 08:26:26
2014-11-03 | 2014-11-05 08:13:15
2014-11-03 | 2014-11-07 08:06:32
我希望得到一个结果,其中列的升序排名按日划分类似:
Day | Time |Rank
-----------+---------------------+-----
2014-10-27 | 2014-10-27 08:46:48 | 1
2014-10-28 | 2014-10-28 08:02:42 | 1
2014-10-30 | 2014-10-29 08:35:11 | 2
2014-10-30 | 2014-10-30 08:20:35 | 1
2014-10-31 | 2014-10-31 08:18:13 | 2
2014-10-31 | 2014-10-31 18:12:06 | 1
2014-11-03 | 2014-11-03 10:35:45 | 4
2014-11-03 | 2014-11-04 08:26:26 | 3
2014-11-03 | 2014-11-05 08:13:15 | 2
2014-11-03 | 2014-11-07 08:06:32 | 1
我正在测试一些关于我在这里找到的SQLite Rank的想法
select p1.*,
( select count(*)
from table as p2
where p2.time> p1.time
) as timeRank
from table as p1
但他们主要是因为订购的Rank不适合我。
我在SQL Fiddle上有一个样本,我试图解决这个问题。
有没有办法在sqlite中解决这个问题,或者最好在Perl / Python中处理这个问题?
答案 0 :(得分:5)
你很亲密。您需要在日期上使用条件并使用>=
进行比较:
select p1.*,
(select count(*)
from table as p2
where p2.date = p1.date and
p2.time >= p1.time
) as timeRank
from table as p1;
严格地说,这更接近于dense_rank()
,但除非您有重复的值,否则差异并不重要。如果你有联系,那么以下内容应该有效:
select p1.*,
(select 1 + count(*)
from table as p2
where p2.date = p1.date and
p2.time > p1.time
) as timeRank
from table as p1;