#mysql #sql
#mysql #sql
Вопрос:
У меня есть эта таблица здесь :
--------- ---------- ------------ ------------
| idStep | idProj | dateStart | dateEnd |
--------- ---------- ------------ ------------
| 1 | 1 | 2011-07-01 | 2011-09-01 |
| 1 | 2 | 2012-05-01 | 2012-05-10 |
| 1 | 3 | 2011-11-01 | 2012-01-20 |
| 2 | 1 | 2011-09-02 | 2011-11-30 |
| 2 | 2 | 2012-05-11 | 2012-06-01 |
| 2 | 3 | 2012-01-21 | 2012-04-01 |
| 3 | 1 | 2011-12-01 | 2012-07-07 |
| 3 | 2 | 2012-06-02 | 2012-07-01 |
| 3 | 3 | 2012-04-02 | NULL |
| 4 | 1 | 2012-07-08 | NULL |
| 4 | 2 | 2012-07-01 | 2012-07-21 |
| 5 | 2 | 2012-07-22 | 2012-07-23 |
--------- ---------- ------------ ------------
Мне нужно найти текущий шаг каждого проекта путем поиска наивысшего idStep каждого idProject без использования Group By, в котором я полностью застрял. Без GROUP BY я просто не могу туда попасть.
В принципе, вывод должен быть таким :
--------- ---------- ------------ ------------
| idStep | idProj | dateStart | dateEnd |
--------- ---------- ------------ ------------
| 3 | 3 | 2012-04-02 | NULL |
| 4 | 1 | 2012-07-08 | NULL |
| 5 | 2 | 2012-07-22 | 2012-07-23 |
--------- ---------- ------------ ------------
Я хочу использовать запрос, построенный следующим образом
SELECT idProj,idStep
FROM table
WHERE idStep = (SELECT max(idStep) FOR EACH idProj)
Я знаю, что ДЛЯ КАЖДОГО не является SQL, я только пытаюсь сделать мою желаемую структуру запроса читаемой.
Ответ №1:
Вам нужен коррелированный подзапрос:
SELECT idProj, idStep
FROM table t
WHERE t.idStep = (SELECT max(idStep)
FROM table t2
WHERE t2.idProj = t.idProj
);