Я дам 2 примера, первый один, который работает, а 2-ой, что я хочу сделать:дата SQL MAX с ГДЕ В пункте
SELECT P.ProjName, D.update_date, SUM(E.pass), SUM(E.fail)
FROM execution AS E INNER JOIN (
daily AS D INNER JOIN project AS P ON D.project_ID = P.ID)
ON E.daily_ID = D.ID
WHERE D.project_id = 25 AND D.update_date = (
SELECT MAX(update_date) FROM daily WHERE project_id = 25;)
GROUP BY P.ProjName, D.update_date;
Это будет работать для отдельных проектов. Это дает мне общее количество пропусков и сбоев за последний день данного проекта (здесь, 25). Я хотел бы захватить группу проектов, используя предложение WHERE IN. Например, (но не работает):
SELECT P.ProjName, D.update_date, SUM(E.pass), SUM(E.fail)
FROM execution AS E INNER JOIN (
daily AS D INNER JOIN project AS P ON D.project_ID = P.ID)
ON E.daily_ID = D.ID
WHERE D.project_id IN (25,26,28,29,30,31)
GROUP BY P.ProjName, D.update_date
HAVING MAX(D.update_date);
Это приведет к тому, что каждый день будет тянут за каждый из проектов. Существует 3 таблицы, «проект», который связан «ежедневно», который связан «исполнением». Таким образом, для каждого проекта существует несколько ежедневных данных, и каждый день имеет несколько данных выполнения. Я понимаю, что HAVING MAX, вероятно, нуждается в сравнении, но к чему? Возможно, измененный JOIN поможет.
Спасибо, Keith
Вы используете MSSQL? –
Это MS Access DB с использованием разъема ADODB (Jet 4) из Excel VBA. Первый ответ, решил. Спасибо за помощь каждого. – dropper
Еще одно примечание. Мне нужно было добавить P.ID к операторам SELECT и GROUP BY, чтобы сохранить исходный порядок. – dropper