最も効率的な方法はcall_ref
、 eachの最小値を除外し、その最小値をlink_to_client
取ることだと思います:
SELECT calls.link_to_client,
MAX(calls.Call_Ref) call_ref
FROM calls WITH (NOLOCK)
LEFT JOIN
( SELECT link_to_client, MAX(Call_Ref) call_ref
FROM calls WITH (NOLOCK)
WHERE calls.call_type = 'PM'
GROUP BY link_to_client
) MaxCalls
ON MaxCalls.link_to_client = calls.link_to_client
AND MaxCalls.Call_ref = calls.call_ref
WHERE calls.call_type = 'PM'
AND MaxCalls.link_to_Client IS NULL
GROUP BY calls.link_to_Client;
ただし、これを拡張して、たとえば各顧客の 5 番目を取得したい場合は、面倒になり始めます。その場合、私は次を使用します:
SELECT calls.link_to_client, calls.call_ref
FROM calls
WHERE 5 = ( SELECT COUNT(*)
FROM calls c2
WHERE c2.link_to_Client = calls.link_to_Client
AND c2.call_ref <= calls.call_ref
);
ROW_NUMBER
私の最後のアドバイスは、 !を使用できる新しいバージョンの SQL-Server にアップグレードすることです。
SQL Fiddle の例
フィドルを提供してくれたNenad Zivkovicに感謝