2

ある顧客の 2 番目の結果を表示するクエリがあります。私が今しなければならないことは、特定のリスト (たとえば、20 人の異なる顧客) の各顧客の 2 番目の結果を表示することです。

どうすればいいですか?SSMS 2005 経由の MS SQL2000

1 人の顧客に対する現在のクエリは

SELECT TOP 1 link_to_client, call_ref
FROM
(
    SELECT TOP 2 link_to_client, call_ref
    FROM calls WITH (NOLOCK)
    WHERE link_to_client IN ('G/1931')
        AND call_type = 'PM'
    ORDER BY call_ref DESC
) x
ORDER BY call_ref

ありがとう

4

3 に答える 3

3

row_number()関数を使用する必要があります。次のようにしてみてください。

select
    link_to_client, call_ref 
from
    (
        select
            link_to_client, call_ref, 
            row_number() over (partition by link_to_client order by call_ref desc) n
        from 
            calls with (nolock) 
        where 
            link_to_client in ('G/1931') 
            and call_type = 'PM' 
    ) x
where
    n = 2 -- second result for every client
于 2013-08-29T09:34:34.673 に答える
1

これはsqlserver 2000で機能すると思います:

SELECT link_to_client, 
(
SELECT TOP 1 call_ref
FROM
(
    SELECT TOP 2 link_to_client
    FROM calls WITH (NOLOCK)
    WHERE link_to_client = a.link_to_client
        AND call_type = 'PM'
    ORDER BY call_ref DESC
) x
ORDER BY call_ref
) call_ref
FROM
(SELECT DISTINCT link_to_client
FROM calls WITH (NOLOCK)) a
于 2013-08-30T09:40:37.627 に答える
1

これを試してみてください -

SELECT 
      link_to_client
    , call_ref
FROM (
    SELECT 
          link_to_client
        , call_ref
        , rn = ROW_NUMBER() OVER (PARTITION BY link_to_client ORDER BY call_ref DESC)
    FROM dbo.calls WITH (NOLOCK)
    WHERE link_to_client = 'G/1931'
        AND call_type = 'PM'
) x
WHERE x.rn = 2
于 2013-08-29T09:35:26.303 に答える