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

Nhóm theo tuần trong MySQL

Hai bước để thực hiện điều này:

Một, bạn cần thao tác cắt ngắn một tuần - thao tác này sẽ mất DATETIME của bạn mặt hàng và trả lại vào nửa đêm của Chủ nhật trước đó (nếu quy tắc kinh doanh của bạn cho biết rằng tuần bắt đầu vào Chủ nhật).

Điều đó trở thành một mục GROUP BY phù hợp. Hack WEEK () / YEAR () không phù hợp cho việc này. Nó thực sự tạo ra một mớ hỗn độn vào tuần cuối cùng / đầu tiên của mỗi năm.

Theo kinh nghiệm của tôi, biểu thức exxpression này sẽ thực hiện thủ thuật cắt ngắn một tuần cho bạn, Chủ nhật - Thứ bảy,

  FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -1, 7))

Để xem các tuần từ Thứ Hai đến Chủ Nhật, hãy sử dụng biểu thức này.

  FROM_DAYS(TO_DAYS(TIMESTAMP) -MOD(TO_DAYS(TIMESTAMP) -2, 7))

Vì vậy, bạn có thể làm điều này.

  SELECT COUNT(whatever), SUM(whatelse),
         FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7)) as WEEKSTART,
    FROM TABLE
   GROUP BY FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7))

Làm cách nào để nhóm theo tuần trong MySQL?

Thứ hai, bạn cần thêm sáu ngày vào ngày bị cắt ngắn đó, để bạn có thể hiển thị ngày cuối cùng của mỗi tuần cùng với ngày đầu tiên.

Đây là một cách tốt để làm điều đó, với một truy vấn lồng nhau

SELECT whats, elses, weekstart, weekstart + INTERVAL 6 DAY AS weekend
  FROM (
  SELECT COUNT(whatever) AS whats, SUM(whatelse) AS elses,
         FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7)) AS weekstart,
    FROM TABLE
   GROUP BY FROM_DAYS(TO_DAYS(event_time) -MOD(TO_DAYS(event_time) -1, 7))
  ) AS summary
ORDER BY weekstart

Làm rất nhiều điều này? Tôi khuyên bạn nên tạo một TRUNC_WEEK được lưu trữ chức năng.




  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 có thể thay thế nhiều ký tự không?

  2. Không thể kết nối với mySQL trong C #

  3. Làm thế nào để khóa các bảng bằng codeigniter?

  4. MySQL INSERT mà không cần phải chỉ định mọi trường không phải là trường mặc định (# 1067 - Giá trị mặc định không hợp lệ cho 'bảng')

  5. CHỌN giá trị tối thiểu và tối đa từ một phần của bảng trong MySQL