2014-11-23 2 views
3

Я хочу ранжировать день, таблицу времени в sqlite3 и бороться с отсутствием некоторых аналитических функций. Следующая таблицаno partitioned Ранг в SQLite: нужна эмуляция

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 

, но они в основном предназначены для заказа Ранга, который не работал на меня.

У меня есть образец на SQL Fiddle, где я пытался решить проблему.

есть способ решить эту проблему в SQLite или лучше справиться с этим в Perl/Python? S

ответ

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; 
Смежные вопросы