Вы можете сделать это с помощью пары LEFT JOINs
:
SELECT
ts.ID,
MAX(ti.Time) AS Time,
MAX(ts.TimeStart) AS TimeStart,
MAX(tto.Time) AS TimeOut
FROM tableA ts
LEFT JOIN tableB ti ON ts.ID = ti.ID AND ti.Code IN ('IN','IN/OUT') -- "Time IN"
LEFT JOIN tableB tto ON ts.ID = tto.ID AND tto.Code IN ('Out','IN/OUT') -- "Time OUT"
GROUP BY ts.ID
ORDER BY ts.ID
Как уже упоминалось, Impaler, ваше описание IN/OUT
и желаемый результат, который вы предоставили, не совпадают c. В приведенном выше примере предполагается, что IN/OUT
- это одновременно IN
и OUT
. Это также даст вам максимальное TimeIn/TimeOut
значения, если есть повторяющиеся записи.
DB Fiddle (Postgres)