Truy vấn SQL để có được ngày cuối cùng mỗi tuần


8

Sử dụng MySQL, tôi cần truy vấn một bảng có trường datetime. Tôi cần phải đếm tất cả các hồ sơ cho một tuần cụ thể. Sử dụng date_format (colname, "% Y% V") sẽ trả về tuần #, nhưng tôi cần ngày cuối cùng (ngày của tháng 01-28 | 29 | 30 | 31) cho tuần đó.

Ví dụ đầu ra

    QUẬN (*) | Cuộc hẹn
    11 | 2012-01-07
    22 | 2012-01-2014
    123 | 2012-01-21

Cứu giúp?

Lưu ý: Ngày cuối tuần trong trường hợp của tôi là Chủ nhật.

Câu trả lời:


12

Bạn cần sử dụng chức năng DAYOFWEEK

Nếu kết thúc tuần vào thứ bảy, bất kỳ ngày nào cũng có thể biến thành ngày thứ bảy.

Ví dụ: cái này tính vào thứ bảy sắp tới

SELECT DATE(NOW() + INTERVAL (7 - DAYOFWEEK(NOW())) DAY);

Điều này sẽ tính vào Chủ nhật sắp tới ( thay vào đó bạn phải sử dụng chức năng WEEKDAY )

SELECT DATE(NOW() + INTERVAL (6 - WEEKDAY(NOW())) DAY); 

Đối với một bảng được gọi là mytable với Cột ngày được gọi là Ngày, tổng của bạn sẽ là

ngày thứ bảy

SELECT COUNT(1) DateCount,EndOfWeekDate FROM
(
    SELECT DATE(theDate + INTERVAL (7 - DAYOFWEEK(theDate)) DAY) EndOfWeekDate
    FROM mytable
) A GROUP BY EndOfWeekDate;

chủ nhật

SELECT COUNT(1) DateCount,EndOfWeekDate FROM
(
    SELECT DATE(theDate + INTERVAL (6 - WEEKDAY(theDate)) DAY) EndOfWeekDate
    FROM mytable
) A GROUP BY EndOfWeekDate;

Hãy thử một lần !!!

Nếu bạn muốn bất kỳ cuối tuần nào khác ngoài thứ bảy và chủ nhật, tôi đã viết một thuật toán điên rồ vào ngày 22 tháng 9 năm 2011 để tính toán bất kỳ tuần nào bắt đầu và kết thúc bất cứ ngày nào .


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.