0

私は2つのテーブルと呼び出しテーブルと呼び出し後の作業テーブルを持っています。これらの 2 つのテーブルは、通話後の作業レコードが通話テーブルに格納されていても、1 対 1 の関係があります。通話テーブルの 3 つの値を結合することで、通話を事後処理通話にリンクできます。通話テーブルには、通話の開始時刻と終了時刻の値も保持されます。

アフター コール作業テーブルのデータは完全に混乱しており、1 つのコールに多くのアフター コール作業レコードが含まれる場合があります。私のクライアントは、通話の開始時間に基づいて最初のレコードを選択し、この 1 行のデータのみを取得することを望んでいます。

RANKING 関数を使用するように提案されていますが、私はこれに慣れていません。

さらに説明が必要な場合はお知らせください。

ありがとうございました

4

1 に答える 1

0

自己抽出ランキングと密ランキングの例 SQL Server 2008 以降を使用していると仮定します。

declare @Person Table ( personID int identity, person varchar(8));

insert into @Person values ('Brett'),('Sean'),('Chad'),('Michael'),('Ray'),('Erik'),('Queyn');

declare @Orders table ( OrderID int identity, PersonID int, Desciption varchar(32), Amount int);

insert into @Orders values (1, 'Shirt', 20),(1, 'Shoes', 50),(2, 'Shirt', 22),(2, 'Shoes', 20),(3, 'Shirt', 20),(3, 'Shoes', 50),(3, 'Hat', 20),(4, 'Shirt', 20),(5, 'Shirt', 20),(5, 'Pants', 30),
(6, 'Shirt', 20),(6, 'RunningShoes', 70),(7, 'Shirt', 22),(7, 'Shoes', 40),(7, 'Coat', 80);

with a as 
    (
    Select
        person
    ,   o.Desciption
    ,   o.Amount
    ,   rank() over(partition by p.personId order by Amount) as Ranking
    ,   Dense_rank() over(partition by p.personId order by Amount) as DenseRanking
    from @Person p
        join @Orders o on p.personID = o.PersonID
    )
select *
from a 
where Ranking <= 2  -- determine top 2, 3, etc.... whatever you want.
order by person, amount
于 2013-03-25T17:00:10.703 に答える