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

Đếm tất cả các hàng với các cột cụ thể và nhóm theo tuần

Truy vấn của bạn không mang tính xác định nên không có gì ngạc nhiên khi bạn nhận được kết quả không mong muốn. Ý tôi là bạn có thể chạy truy vấn này trên cùng một dữ liệu 5 lần và nhận được 5 tập kết quả khác nhau. Điều này là do bạn đang chọn DATE(timestamp) nhưng nhóm theo WEEK(DATE(startdate)) , do đó, truy vấn sẽ trả về thời gian của hàng đầu tiên mà nó xuất hiện trong mỗi tuần ngày bắt đầu trong BẤT KỲ đặt hàng.

Hãy xem xét 2 hàng sau (có dấu thời gian ở định dạng ngày tháng để dễ đọc):

TimeStamp       StartDate
20120601        20120601
20120701        20120601

Truy vấn của bạn đang nhóm theo WEEK(StartDate) là 23, vì cả hai hàng đều đánh giá cùng một giá trị nên bạn sẽ mong đợi kết quả của mình có 1 hàng có tổng số là 2.

TUY NHIÊN DATE(Timestamp) Cũng nằm trong danh sách được chọn và vì không có ORDER BY câu lệnh truy vấn không biết Dấu thời gian nào để trả về '20120601' hoặc '20120701'. Vì vậy, ngay cả trên tập hợp kết quả nhỏ này, bạn có 50:50 cơ hội nhận được:

TimeStamp       COUNT
20120601        2

và cơ hội 50:50 để nhận được

TimeStamp       COUNT
20120701        2

Nếu bạn thêm nhiều dữ liệu vào tập dữ liệu như vậy:

TimeStamp       StartDate
20120601        20120601
20120701        20120601
20120701        20120701

Bạn có thể nhận được

TimeStamp       COUNT
20120601        2
20120701        1

hoặc

TimeStamp       COUNT
20120701        2
20120701        1

Bạn có thể thấy với 37.000.000 hàng, bạn sẽ sớm nhận được kết quả mà bạn không mong đợi và không thể đoán trước!

CHỈNH SỬA

Vì có vẻ như bạn đang cố gắng lấy ngày đầu tuần trong kết quả của mình, trong khi nhóm theo tuần, bạn có thể sử dụng thông tin sau để bắt đầu tuần (thay thế CURRENT_TIMESTAMP bằng bất kỳ cột nào bạn muốn):

SELECT  DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 1 - DAYOFWEEK(CURRENT_TIMESTAMP) DAY) AS WeekStart

Sau đó, bạn cũng có thể nhóm theo ngày này để nhận được kết quả hàng tuần và tránh gặp rắc rối khi có những thứ trong danh sách đã chọn mà không có trong nhóm của bạn trước.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thêm hình ảnh vào cơ sở dữ liệu trong Java

  2. CẬP NHẬT bảng MySQl đơn giản từ mảng php

  3. Cơ sở dữ liệu kết quả là đối tượng hay mảng?

  4. Bạn có thể sử dụng các giá trị tổng hợp trong ON DUPLICATE KEY không

  5. nâng cao trình kích hoạt lỗi ứng dụng trong MySQL DBMS