SQL - оператор LEFT JOIN и WHERE для отображения только первой строки

Перечитал много тем, но так и не нашел правильного решения своей проблемы. Это сопоставимо с этим Thread

У меня есть запрос, который собирает данные и записывает их для сценария оболочки в файл csv:

SELECT
    '"Dose History ID"' = d.dhs_id,
    '"TxFieldPoint ID"' = tp.tfp_id,
    '"TxFieldPointHistory ID"' =  tph.tph_id,
    ...

FROM txfield t
LEFT JOIN txfielpoint tp ON t.fld_id = tp.fld_id
LEFT JOIN txfieldpoint_hst tph ON fh.fhs_id = tph.fhs_id
...

WHERE d.dhs_id NOT IN ('1000', '10000')
    AND ...
ORDER BY d.datetime,...;

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

WHERE "Rownumber" is 1

или что-то в этом роде. До сих пор я не мог реализовать правильный подзапрос или использовать функцию ROW_NUMBER() SQL. Ваша помощь будет очень признательна. Результат выглядит так, и, основываясь на последнем идентификаторе, мне просто нужна одна строка для каждого числа og (все идентификаторы не являются строго последовательными).

A01";261511;2843119;714255;3634457;
A01";261511;2843113;714256;3634457;
A01";261511;2843113;714257;3634457;
A02";261512;2843120;714258;3634464;
A02";261512;2843114;714259;3634464;
....

person Nurito    schedule 14.12.2016    source источник
comment
попробуйте GROUP BY [все поля, кроме tph.tph_id], хотя они предназначены для агрегирования, GROUP BY должно дать вам желаемый результат   -  person Jameson the dog    schedule 14.12.2016
comment
Возможно я что-то упускаю, но в самом начале вашего выбора у вас фатальная ошибка. Вы не можете присвоить значение строке (т. е. '"Dose History ID"' = d.dhs_id недопустимо). Во-вторых, вы используете псевдоним d (как в WHERE d.dhs_id NOT IN ('1000', '10000')), и я не вижу, где этот псевдоним определяется.   -  person FDavidov    schedule 14.12.2016
comment
@FDavidov псевдоним для d (и других) следует позже в части SELECT. Я старался   -  person Nurito    schedule 15.12.2016
comment
Спасибо за ваши ответы - @FDavidov псевдоним для d (и другие) следуют позже в части SELECT. Я попытался показать с помощью ..., что это всего лишь часть фактического кода, потому что запрос довольно большой, но работает так, как показано. Этот оператор дает мне в моем csv описание идентификатора истории дозы в первой строке и записывает значения после второй строки в столбце. Я попробовал это с помощью GROUP BY, но это не тот случай, когда все данные в нескольких строках одинаковы. Отличается только ID, но этого достаточно, чтобы не группировать. Или я на неправильном пути с этим?   -  person Nurito    schedule 15.12.2016


Ответы (1)


Я думаю, что "GROUP BY" может удовлетворить ваши потребности.

Вы можете группировать строки с одинаковыми значениями для набора столбцов в одну строку.

person Jacopo    schedule 14.12.2016