Существует ряд местоположений с членами на разных этапах порядкового процесса. Участники могут быть в нескольких процессах с различным прогрессом в одном или нескольких местах.SQL Query to Count Distinct with Group By with Join
Таблица соединений между местоположениями и членами может выглядеть примерно так: шаги.
| id | member_id | step_no | location_id | process_id |
-------------------------------------------------------
| 1 | 1 | 2 | 10 | 57
| 2 | 1 | 5 | 10 | 58
| 3 | 2 | 5 | 11 | 37
| 4 | 2 | 1 | 10 | 57
Я не был в состоянии понять, как получить количество уникальных членов, по местоположению, по дальнему шагу элемент находится в процессе.
location_id | 1 | 2 | 3 | 4 | 5 |
---------------------------------
10 | 1 | 0 | 0 | 0 | 1 |
11 | 0 | 0 | 0 | 0 | 1 |
До сих пор, у меня есть этот запрос:
SELECT count(DISTINCT m.id), l.id, l.name
FROM members m
INNER JOIN steps s ON m.id = s.member_id
INNER JOIN locations l ON s.location_id = l.id
WHERE step_no = 5
GROUP BY l.id
ORDER BY l.name
Но это только возвращает STEP_NO = 5, конечно же, и если бы я написал пять из этих запросов, член может быть посчитан дважды в разном шаги.
Вещь, которую вы ищете, называется * сводной таблицей *. Я не знаю, как получить его в postgresql, но вы должны искать этот термин. Возможно, вы это выясните. – MarcinJuraszek
Укажите «самый дальнейший» шаг (для каждого члена) - самый высокий идентификатор, самый высокий номер шага, последняя временная метка? –
@ Clockwork-Muse Хороший вопрос. То, что я подразумевал под «самым дальним», - это наивысший номер шага для определенного члена в каждом месте. Например, элемент 2 выше отображается в двух местах. – JHo