Ваш запрос не имеет смысла. У вас есть FIRST(AgentID)
, но вы включаете AgentId
в GROUP BY
. Ваш запрос эквивалентен просто SELECT DISTINCT
с вашими столбцами.
Предполагая, что вы действительно хотите первое значение, я легко могу представить себе в SQL Server обе функции с использованием оконных функций. Я предпочитаю условную агрегацию:
select ClientID, ClientREF,
max(case when seqnum = 1 then AgentID end) AS FirstOFAgentID, F
max(case when seqnum = 1 then AgentREF end) AS FirstOFAgentREF
from (select ClientID, ClientREF, AgentID, AgentREF,
row_number() over (partition by ClientID, ClientREF order by ?) as seqnum
from table 1 Right join
table2
ON table1 = table2 Left join
table 4
ON table1 = table4
) cc
group by ClientID, ClienREF;
Второй использует SELECT DISTINCT
с FIRST_VALUE()
, который предоставляется как оконная функция, но не как функция агрегирования.