Исключить один столбец из группы в объединении - PullRequest
0 голосов
/ 25 марта 2019

У меня агрегированный запрос:

SELECT SERIAL, pos_id, MIN(fecha)
FROM pvs 
WHERE pos_id = 50
GROUP BY SERIAL, pos_id
ORDER BY MIN(fecha) DESC;

First query

и он достаточно хорошо работает для получения необходимой информации, за исключением одного фрагмента данных, который является идентификатором этого серийного номера в другой таблице. Это происходит, когда я присоединяюсь.

SELECT d.id, p.SERIAL, p.pos_id, MIN(fecha)
FROM pvs p
JOIN devices d
ON d.SERIAL=p.SERIAL
WHERE p.pos_id = 50
GROUP BY p.SERIAL, p.pos_id, d.id
ORDER BY MIN(fecha) DESC;

Second query, lots of duplicates

Я хочу показать идентификатор каждой строки в другой таблице, но не могу исключить идентификатор из группы (мне просто нужна первая дата и только первое появление этого серийного номера). То есть я хочу первый запрос, но добавив идентификатор из другой таблицы.

1 Ответ

1 голос
/ 25 марта 2019

Вы можете присоединиться к подзапросу

select  d.id, t.SERIAL, t.pos_id, t.min_fecha
from  devices d 
INNER JOIN ( 
    SELECT SERIAL, pos_id, MIN(fecha) min_fecha
    FROM pvs 
    WHERE pos_id = 50
    GROUP BY SERIAL, pos_id
    ORDER BY MIN(fecha) DESC;

    ) t on t.SERIAL = d.SERIAL
ORDER BY min_fecha DESC  

или если вам нужен только один идентификатор, примените агрегационную функцию

SELECT min(d.id), p.SERIAL, p.pos_id, MIN(fecha)
FROM pvs p
JOIN devices d
ON d.SERIAL=p.SERIAL
WHERE p.pos_id = 50
GROUP BY p.SERIAL, p.pos_id
ORDER BY MIN(fecha) DESC;
...