là có một cách đơn giản hơn so với viết:MYSQL: Làm thế nào tôi có thể tìm thấy 'ngày thứ Hai cuối cùng của' (hiệu suất Issue)
chọn date_sub (curdate(), khoảng WEEKDAY (curdate()) ngày) như LastMonday
từ kép
là có một cách đơn giản hơn so với viết:MYSQL: Làm thế nào tôi có thể tìm thấy 'ngày thứ Hai cuối cùng của' (hiệu suất Issue)
chọn date_sub (curdate(), khoảng WEEKDAY (curdate()) ngày) như LastMonday
từ kép
Nếu bạn không sử dụng MySQL cổ, bạn có thể bọc nó trong một chức năng được lưu trữ.
CREATE FUNCTION `LastMonday`() RETURNS DATETIME
RETURN DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) ;
và sau đó gọi
select LastMonday() as LastMonday
Cập nhật:
Nếu bạn gặp vấn đề hiệu suất, bạn có thể tồn tại các giá trị trong một biến phiên. Bằng cách đó bạn có thể chắc chắn rằng nó sẽ chỉ được tính một lần.
set @LastMonday=LastMonday();
select @Lastmonday;
(trong truy vấn đơn giản này, nó làm cho không có sự khác biệt của khóa học ...)
đó là chính xác làm thế nào tôi đã "tránh" các tính toán ngày dài tìm kiếm cho đến bây giờ ... Tôi đã/đang lo lắng về chi phí tiềm năng ... – lexu
Tôi đã thêm vào "cập nhật hiệu suất" gợi ý của bạn để codebase của chúng tôi. Nó tạo nên sự khác biệt lớn, bằng cách nào đó tôi đã mong đợi hàm này chỉ được gọi một lần .. (nhưng làm cách nào để trình tối ưu hóa biết tôi không trả về thời gian tính bằng mili giây.) – lexu
Bí quyết ở đây là giá trị được tính một lần và sau đó lưu vào bộ nhớ cache theo cách thủ công. Bạn có thể thử những gì trình tối ưu hóa làm. Nó có thể đủ thông minh để lưu trữ nó quá, nhưng bạn không thể thực sự dựa vào nó. –
Hãy thử điều này:
-- Today is 05 April 2013
-- Get Last Monday from MySQL
SELECT DATE_FORMAT(LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 7) % 7), '%Y-%m-%d') last_monday;
-- Output
last_monday
-------------
2013-04-29
SET @dateCurrent = CURDATE();
SET @dateCurrentDayInWeek = DAYOFWEEK(@dateCurrent) - 2;
SET @dateLastMonday = DATE_ADD(@dateCurrent, INTERVAL [email protected] DAY);
SELECT @dateLastMonday;
Tôi nghĩ rằng đó là đơn giản như bạn sẽ hiểu rồi. – Jambobond