Mysql
 sql >> база данни >  >> RDS >> Mysql

Пребройте броя на редовете, които не са в рамките на 10 секунди един от друг

Нека започна с тази таблица. Ще използвам обикновени времеви марки, за да можем лесно да видим какво се случва.

180.2.79.3   2011-01-01 08:00:00
180.2.79.3   2011-01-01 08:00:09
180.2.79.3   2011-01-01 08:00:20
180.2.79.3   2011-01-01 08:00:23
180.2.79.3   2011-01-01 08:00:25
180.2.79.3   2011-01-01 08:00:40
180.2.79.4   2011-01-01 08:00:00
180.2.79.4   2011-01-01 08:00:13
180.2.79.4   2011-01-01 08:00:23
180.2.79.4   2011-01-01 08:00:25
180.2.79.4   2011-01-01 08:00:27
180.2.79.4   2011-01-01 08:00:29
180.2.79.4   2011-01-01 08:00:50

Ако те разбирам правилно, искаш да ги броиш така.

180.2.79.3   3
180.2.79.4   3

Можете да направите това за всеки ip_address, като изберете максималната времева марка, която е и двете

  • по-голямо от времевата марка на текущия ред и
  • по-малко или равно на 10 секунди по-голямо от клеймото за време на текущия ред.

Вземането на тези два критерия заедно ще въведе някои нули, които се оказват наистина полезни.

select ip_address, 
       t_s.time_stamp, 
       (select max(t.time_stamp) 
        from t_s t 
        where t.ip_address = t_s.ip_address 
          and t.time_stamp > t_s.time_stamp
          and t.time_stamp - t_s.time_stamp <= interval '10' second) next_page
from t_s 
group by ip_address, t_s.time_stamp
order by ip_address, t_s.time_stamp;

ip_address   time_stamp            next_page
180.2.79.3   2011-01-01 08:00:00   2011-01-01 08:00:09
180.2.79.3   2011-01-01 08:00:09   <null>
180.2.79.3   2011-01-01 08:00:20   2011-01-01 08:00:25
180.2.79.3   2011-01-01 08:00:23   2011-01-01 08:00:25
180.2.79.3   2011-01-01 08:00:25   <null>
180.2.79.3   2011-01-01 08:00:40   <null>
180.2.79.4   2011-01-01 08:00:00   <null>
180.2.79.4   2011-01-01 08:00:13   2011-01-01 08:00:23
180.2.79.4   2011-01-01 08:00:23   2011-01-01 08:00:29
180.2.79.4   2011-01-01 08:00:25   2011-01-01 08:00:29
180.2.79.4   2011-01-01 08:00:27   2011-01-01 08:00:29
180.2.79.4   2011-01-01 08:00:29   <null>
180.2.79.4   2011-01-01 08:00:50   <null>

Печатът за време, който бележи края на посещение, има нула за собствената си следваща_страница. Това е така, защото нито едно времево клеймо не е по-малко или равно на time_stamp + 10 секунди за този ред.

За да получа брой, вероятно ще създам изглед и ще преброя нулевите стойности.

select ip_address, count(*)
from t_s_visits 
where next_page is null
group by ip_address

180.2.79.3   3
180.2.79.4   3


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да получите време за зареждане в милисекунди или микросекунди в mysql

  2. MySQL:как да индексираме клауза ИЛИ

  3. Как мога да забавя дъмп на MySQL, така че да не повлияе на текущото натоварване на сървъра?

  4. MySQL пълнотекстово търсене спрямо стойност на колона?

  5. Извличане на данни от JDBC база данни в Jtable