Chúng tôi có thể sử dụng DayName()
hàm lấy tên của ngày trong tuần tương ứng với Ngày. Chúng tôi sẽ sử dụng kết quả của hàm này để hạn chế các ngày cuối tuần trước NOT IN ('Saturday', 'Sunday')
.
Ngoài ra, chúng tôi sẽ cần tăng phạm vi trình tạo số tối đa 10 . Bởi vì có khả năng chúng ta có thể đi qua 2 ngày cuối tuần (tổng cộng 4 ngày) ở hai bên của 5 ngày trong tuần.
Vì vậy, chúng ta cần 2 (cặp ngày cuối tuần đầu tiên) + 5 (các ngày trong tuần) + 2 (cặp ngày cuối tuần thứ hai) + 1 (ngày thứ 6 trong tuần) =10 ngày để xem xét. Ví dụ về trường hợp cạnh này sẽ là khi ngày nhập là Chủ nhật.
Chúng tôi sẽ cần sử dụng LIMIT 6
chỉ giới hạn kết quả trong tối đa 6 ngày, trong các trường hợp không cạnh tranh.
Giản đồ (MySQL v5.7)
CREATE TABLE `HELPER_SEQ` (`I` tinyint(3) UNSIGNED NOT NULL);
INSERT INTO `HELPER_SEQ` (`I`) VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
Truy vấn
SELECT
DATE_FORMAT((DATE('2018-11-21') - INTERVAL(S.`I` - 1) DAY), '%Y-%m-%d')
AS VAR
FROM `HELPER_SEQ` AS S
WHERE S.`I` <= 10
AND DAYNAME(DATE_FORMAT((DATE('2018-11-21') - INTERVAL(S.`I` - 1) DAY), '%Y-%m-%d')) NOT IN ('SATURDAY', 'SUNDAY')
ORDER BY VAR DESC
LIMIT 6;
Kết quả
| VAR |
| ---------- |
| 2018-11-21 |
| 2018-11-20 |
| 2018-11-19 |
| 2018-11-16 |
| 2018-11-15 |
| 2018-11-14 |
Bản trình diễn Ốp lưng - Ngày nhập:25 tháng 11 năm 2018 (Chủ nhật)
CREATE TABLE `HELPER_SEQ` (`I` tinyint(3) UNSIGNED NOT NULL);
INSERT INTO `HELPER_SEQ` (`I`) VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
Truy vấn số 2
SELECT
DATE_FORMAT((DATE('2018-11-25') - INTERVAL(S.`I` - 1) DAY), '%Y-%m-%d')
AS VAR
FROM `HELPER_SEQ` AS S
WHERE S.`I` <= 10
AND DAYNAME(DATE_FORMAT((DATE('2018-11-25') - INTERVAL(S.`I` - 1) DAY), '%Y-%m-%d')) NOT IN ('SATURDAY', 'SUNDAY')
ORDER BY VAR DESC
LIMIT 6;
Kết quả
| VAR |
| ---------- |
| 2018-11-23 |
| 2018-11-22 |
| 2018-11-21 |
| 2018-11-20 |
| 2018-11-19 |
| 2018-11-16 |