2016-10-28 2 views
-1

У меня есть список дней, как этотвыбрать ближайший строку, которая имеет одно значение

CREATE TABLE `date` (
    `fecha` date NOT NULL, 
    `feriado` int(11) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

-- 
-- Volcar la base de datos para la tabla `date` 
-- 
INSERT INTO `date` VALUES ('2016-10-28', 0); 
INSERT INTO `date` VALUES ('2016-10-29', 0); 
INSERT INTO `date` VALUES ('2016-10-30', 1); 
INSERT INTO `date` VALUES ('2016-10-31', 1); 
INSERT INTO `date` VALUES ('2016-11-01', 0); 
INSERT INTO `date` VALUES ('2016-11-02', 0); 
INSERT INTO `date` VALUES ('2016-11-03', 0); 

и этот запрос, добавить даты

SELECT ADDDATE(CURDATE(),INTERVAL 2+(select COUNT(fecha) FROM date where fecha BETWEEN curdate() AND ADDDATE(CURDATE(),INTERVAL 2 DAY) AND feriado=1) DAY) 

Как я могу сделать, что если дата результат имеет feriado = 1, он возвращает ближайший в будущем, который имеет feriado = 0? Спасибо!

+0

Можете ли вы предоставить желаемый результат. (Кажется, что feriado должен быть TINYINT) – Strawberry

ответ

0

Если вы пытаетесь получить второй следующий день с feriado = 0, то другой подход мог бы сортировать и выбирать:

SELECT max(fecha) FROM (
    SELECT fecha FROM date 
    WHERE feriado = 0 
    AND fecha > curdate() 
    ORDER by fecha 
    LIMIT 2 
) AS foo; 
0
CREATE TABLE date (
    fecha date NOT NULL PRIMARY KEY, 
    feriado tinyint NOT NULL 
); 

INSERT INTO `date` VALUES 
('2016-10-28', 0), 
('2016-10-29', 0), 
('2016-10-30', 1), 
('2016-10-31', 1), 
('2016-11-01', 0), 
('2016-11-02', 0), 
('2016-11-03', 0); 

SELECT x.* 
    , MIN(y.fecha) nearest 
    FROM date x 
    LEFT 
    JOIN date y 
    ON y.fecha >= x.fecha 
    AND y.feriado = 1 
GROUP 
    BY x.fecha; 

+------------+---------+------------+ 
| fecha  | feriado | nearest | 
+------------+---------+------------+ 
| 2016-10-28 |  0 | 2016-10-30 | 
| 2016-10-29 |  0 | 2016-10-30 | 
| 2016-10-30 |  1 | 2016-10-30 | 
| 2016-10-31 |  1 | 2016-10-31 | 
| 2016-11-01 |  0 | NULL  | 
| 2016-11-02 |  0 | NULL  | 
| 2016-11-03 |  0 | NULL  | 
+------------+---------+------------+