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

SQL để xác định số ngày truy cập tuần tự tối thiểu?

Làm thế nào về (và hãy đảm bảo rằng câu lệnh trước đó kết thúc bằng dấu chấm phẩy):

WITH numberedrows
     AS (SELECT ROW_NUMBER() OVER (PARTITION BY UserID 
                                       ORDER BY CreationDate)
                - DATEDIFF(day,'19000101',CreationDate) AS TheOffset,
                CreationDate,
                UserID
         FROM   tablename)
SELECT MIN(CreationDate),
       MAX(CreationDate),
       COUNT(*) AS NumConsecutiveDays,
       UserID
FROM   numberedrows
GROUP  BY UserID,
          TheOffset  

Ý tưởng là nếu chúng ta có danh sách ngày (dưới dạng số) và row_number, thì những ngày bị bỏ lỡ sẽ làm cho sự chênh lệch giữa hai danh sách này lớn hơn một chút. Vì vậy, chúng tôi đang tìm kiếm một phạm vi có mức bù nhất quán.

Bạn có thể sử dụng "ORDER BY NumConsearchDays DESC" ở cuối phần này hoặc nói "HAVING count (*)> 14" cho một ngưỡng ...

Tuy nhiên, tôi chưa thử nghiệm điều này - chỉ viết nó ra khỏi đỉnh đầu của tôi. Hy vọng hoạt động trong SQL2005 trở đi.

... và sẽ được giúp đỡ rất nhiều bởi một chỉ mục trên tên bảng (UserID, CreationDate)

Đã chỉnh sửa:Hóa ra Offset là một từ dành riêng, vì vậy tôi đã sử dụng TheOffset để thay thế.

Đã chỉnh sửa:Đề xuất sử dụng COUNT (*) rất hợp lệ - Tôi nên làm điều đó ngay từ đầu nhưng không thực sự nghĩ. Trước đây, nó đã sử dụng dateiff (ngày, tối thiểu (Ngày tạo), tối đa (Ngày tạo)) thay thế.

Cướp



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách để điền danh sách thả xuống từ cơ sở dữ liệu trong asp.net bằng cách sử dụng các lớp là gì?

  2. Làm cách nào để có một ràng buộc kiểm tra tham chiếu đến một bảng khác?

  3. Trong SQL, làm cách nào bạn có thể nhóm theo phạm vi?

  4. Mục đích của việc đặt chữ 'N' trước các tham số hàm trong TSQL là gì?

  5. Thống kê Sử dụng Chỉ mục Máy chủ SQL