Псевдонимы, определенные в предложении SELECT
, не могут быть повторно использованы в том же предложении. Вам нужно либо повторить выражение, либо использовать производную таблицу (cte или подзапрос).
Второй вариант будет выглядеть так:
SELECT
t.*,
DATEDIFF(end_date, td1.start_date) AS num_days
FROM (
SELECT
td1.*,
(
SELECT td2.start_date - INTERVAL 1 DAY
FROM test_date td2
WHERE id = td1.id + 1
) AS end_date
FROM test_date td1
) t
В качестве альтернативы, вы также можете присоединиться:
SELECT
td1.*,
td2.start_date - INTERVAL 1 DAY
DATEDIFF(td2.start_date, td1.start_date) - 1 AS num_days
FROM test_date td1
LEFT JOIN test_date td2 ON td2.id = td1.id + 1
Примечание: если вы используете MySQL 8.0, вы можете просто использовать LEAD()
, чтобы получить дату следующей записи, что будет проще и эффективнее.