我有两张桌子和一张通话桌和一张电话后工作桌。这两个表具有一对一的关系,即使呼叫后的工作记录存储在呼叫表中。通过加入呼叫表中的三个值,您可以将呼叫链接到呼叫后工作呼叫。调用表还保存调用的开始和结束时间的值。
呼叫后工作表中的数据是一团糟,有时一个呼叫有很多呼叫后工作记录。我的客户希望我根据通话的开始时间挑选出第一条记录,并且只取这 1 行数据。
有人建议使用 RANKING 功能,但我不熟悉这个任何人有什么想法吗?
如果有什么需要进一步解释的,请告诉我。
谢谢
我有两张桌子和一张通话桌和一张电话后工作桌。这两个表具有一对一的关系,即使呼叫后的工作记录存储在呼叫表中。通过加入呼叫表中的三个值,您可以将呼叫链接到呼叫后工作呼叫。调用表还保存调用的开始和结束时间的值。
呼叫后工作表中的数据是一团糟,有时一个呼叫有很多呼叫后工作记录。我的客户希望我根据通话的开始时间挑选出第一条记录,并且只取这 1 行数据。
有人建议使用 RANKING 功能,但我不熟悉这个任何人有什么想法吗?
如果有什么需要进一步解释的,请告诉我。
谢谢
自提取排名和密集排名示例假设您使用的是 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