Любая помощь приветствуется. Я пытаюсь использовать max(date) в операторе CASE и не могу правильно понять синтаксис или ??
// This works
SELECT
ROUND(sum(CASE WHEN Document_Date BETWEEN DATE_FORMAT("2019-01-01", "%Y-%m-%d") AND DATE_FORMAT("2019-01-31", "%Y-%m-%d") THEN GTotal END),0) TOTAL2019
FROM
salesdata
// But I want to use max(Document_Date) which is 2019-01-31 like so and have tried cast and different combos, but it comes out null or says invalid use of group function. Document_Date is datetime in DB
SELECT
ROUND(sum(CASE WHEN Document_Date BETWEEN DATE_FORMAT("2019-01-01", "%Y-%m-%d") AND DATE_FORMAT(max(Document_Date), "%Y-%m-%d") THEN GTotal END),0) TOTAL2019
FROM
salesdata
Что я делаю не так - спасибо за любую помощь.






вы пытаетесь использовать max агрегат внутри sum. Как правило, вы не можете сделать это без использования подзапросов.
Проверьте мое альтернативное решение
SELECT
ROUND(sum(
CASE WHEN Document_Date BETWEEN DATE_FORMAT("2019-01-01", "%Y-%m-%d") AND (select max(Document_date) from salesData) THEN
GTotal
END),
0) TOTAL2019
FROM
salesdata
Если этот ответ полезен для вас, отметьте его как ответ, чтобы сообщество также могло извлечь из него пользу.
Обратите внимание, что DATE_FORMAT("2019-01-01", "%Y-%m-%d") на самом деле ничего не делает
Спасибо сработало отлично! Действительно ценю это! Кроме того, для всех, кто использует этот код, не хватает одной круглой скобки прямо перед выбором подзапроса. DATE_FORMAT((выбрать...