Видать, очень надо, раз столько попыток. Ну что ж, давай разбираться.
SELECT COALESCE(max(oo.Дата), o.Дата)
FROM Date AS oo
WHERE oo.Дата < o.Дата
Этот запрос явно является попыткой вычислить предыдущую дату для текущей записи. Это напомнило мне
мой собственный ответ на подобную тему. Перепишу его в терминах этого вопроса.
SELECT *
FROM ( SELECT Дата,
Вода,
Смена_ID,
( SELECT Max(Дата)
FROM Date AS t2
WHERE t2.Дата < t1.Дата
) AS Дата_пред
FROM Date AS t1
) AS Тек LEFT JOIN Date AS Пред ON Тек.Дата_пред = Пред.Дата;
В отличие от того случая здесь дата не является уникальной, поэтому у нас будет множественное дублирование. Как его избежать? Ответ на этот вопрос зависит уже от предметной области. Можно добавить условие совпадения смены:
SELECT *
FROM ( SELECT Дата,
Вода,
Смена_ID,
( SELECT Max(Дата)
FROM Date AS t2
WHERE t2.Дата < t1.Дата AND t2.Смена_ID = t1.Смена_ID
) AS Дата_пред
FROM Date AS t1
) AS Тек LEFT JOIN Date AS Пред ON Тек.Дата_пред = Пред.Дата AND Тек.Смена_ID = Пред.Смена_ID;
Но без знания того, какие данные имеются и что из них должно получиться, дальше двигаться сложно.