Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hitung jumlah baris yang tidak berjarak 10 detik satu sama lain

Mari saya mulai dengan tabel ini. Saya akan menggunakan stempel waktu biasa sehingga kami dapat dengan mudah melihat apa yang terjadi.

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

Jika saya memahami Anda dengan benar, Anda ingin menghitungnya seperti ini.

180.2.79.3   3
180.2.79.4   3

Anda dapat melakukannya untuk setiap ip_address dengan memilih stempel waktu maksimum yang keduanya

  • lebih besar dari stempel waktu baris saat ini, dan
  • kurang dari atau sama dengan 10 detik lebih besar dari stempel waktu baris saat ini.

Menggabungkan kedua kriteria ini akan menghasilkan beberapa null, yang ternyata sangat berguna.

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>

Stempel waktu yang menandai akhir kunjungan memiliki nol untuk halaman_berikutnya sendiri. Itu karena tidak ada stempel waktu yang kurang dari atau sama dengan stempel waktu + 10 detik untuk baris tersebut.

Untuk menghitung, saya mungkin akan membuat tampilan dan menghitung nol.

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. Buat pengguna baru di MySQL dan berikan akses penuh ke satu database

  2. tulis hasil kueri sql ke file di mysql

  3. Bagaimana cara menyimpan data yang berisi kutipan di MySQL

  4. Query MySQL Rekursif dengan innoDB relasional

  5. Alat terbaik untuk menyinkronkan database MySQL