Нужно объединить разные таблицы, но во время объединения, чтобы выбрать отдельные строки для одного столбца
У меня есть следующие таблицы:
Devices
-------
id
Device
Snid
locationid
planid
Locations
---------
id
location
Plans
------
id
plan
Assignments
-----------
id
deviceid
startdate
enddate
Я попробовал вот что:
SELECT DISTINCT a.id, a.device, a.Snid, b.location, c.plan, d.startdate, d.enddate
FROM Devices a
LEFT JOIN Locations b on a.locationid=b.id
LEFT JOIN Plans c on a.planid=c.id
LEFT JOIN Assignments d on a.id=deviceid
Если в select я удаляю столбцы назначения (startdate, enddate), то получаю нормальные результаты, но мне нужно получить столбцы таблицы Assignment. Но, как только я добавляю столбцы, я не могу получить различные устройства.
В результате я хотел бы получить таблицу устройств с комбинацией планов и местоположений (для имени плана и местоположения), а также столбцов начальной и конечной даты назначения. И иметь уникальные устройства с последним назначением, которое в mycase должно быть с пустым столбцом конечной даты.
Кроме того, мне нужно получить столбец totalassignments. Я попытался добавить в выделенную часть:
SUM(case when a.id=d.deviceid then 1 else 0) as totalassignments
, но если я использую это, мне нужно добавить группу по. В группе по, мне нужно включить все столбцы, а затем я снова теряю свою личность.
Пример следующим образом:
Таблица устройств
id device locationid planid
2 computer 1 0
3 mobile 2 1
10 printer 1 1
12 scanner 1 1
32 tablet 1 1
42 tv 2 2
68 video 3 2
98 camera 0 0
Таблица расположений
ID location
1 Storage
2 Office
3 Contractor
Таблица планов
ID Plan
1 Short-term
2 Long-term
Таблица назначений
id deviceid startdate enddate
1 10 10/17/2019 2/23/2019
2 32 10/20/2019
3 12 10/18/2019 11/1/2019
4 68
5 98 10/15/2019 10/5/2019
6 42 10/23/2019
7 10 10/1/2019 NULL
8 2 8/18/2019 10/21/2019
9 3 10/23/2020 NULL
10 12 10/2/2019 NULL
Желаемый результат
device deviceid location plan totalassignments startdate enddate
computer 2 Storage NULL 1 8/18/2019 10/21/2019
mobile 3 Office Short-term 1 10/23/2020 NULL
printer 10 Storage Short-term 2 10/1/2019 NULL
scanner 12 Storage Short-term 2 10/2/2019 NULL
tablet 32 Storage Short-term 1 10/20/2019
tv 42 Office Long-term 1 10/23/2019
video 68 ContractorLong-term 1 NULL NULL
camera 98 NULL NULL 1 10/15/2019
Как видите, результат должен иметь устройства (с замененным locationid и planid с соответствующими именами местоположения и плана с использованием внутреннего соединения), для каждого устройства должно быть количество назначений, а рядом с ним - дата начала и окончания последнего назначения (которое настраивается, когда конечной датой является NULL)