Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Đếm số hàng không cách nhau trong vòng 10 giây

Hãy để tôi bắt đầu với bảng này. Tôi sẽ sử dụng dấu thời gian thông thường để chúng ta có thể dễ dàng xem những gì đang diễn ra.

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

Nếu tôi hiểu bạn đúng, bạn muốn đếm những thứ này như thế này.

180.2.79.3   3
180.2.79.4   3

Bạn có thể làm điều đó cho mỗi ip_address bằng cách chọn dấu thời gian tối đa cho cả hai

  • lớn hơn dấu tối ưu của hàng hiện tại và
  • nhỏ hơn hoặc lớn hơn 10 giây so với dấu thời gian của hàng hiện tại.

Kết hợp hai tiêu chí này với nhau sẽ giới thiệu một số null, hóa ra lại thực sự hữu ích.

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>

Dấu thời gian đánh dấu sự kết thúc của một lượt truy cập có giá trị rỗng cho next_page của chính nó. Đó là vì không có dấu thời gian nào nhỏ hơn hoặc bằng time_stamp + 10 giây cho hàng đó.

Để đếm, tôi có thể tạo một chế độ xem và đếm các giá trị rỗng.

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. Xóa, Cập nhật với các bảng dẫn xuất?

  2. Vi phạm ràng buộc về tính toàn vẹn:1048 Cột 'taggable_id' không được để trống

  3. Thêm kết quả cơ sở dữ liệu vào mảng

  4. Trường hợp Mysql không hoạt động

  5. Bỏ tất cả các thủ tục được lưu trữ trong MySQL hoặc sử dụng các thủ tục được lưu trữ tạm thời