2013-03-25 36 views
0

我有两个表格,一个叫表和一个叫做工作表。即使在呼叫工作记录存储在呼叫表中,这两个表也具有一对一的关系。您可以通过加入呼叫表中的三个值来将呼叫链接至接听后的工作呼叫。呼叫表也保存呼叫的开始和结束时间的值。如何根据时间选择第一条记录

通话后工作表中的数据是一团糟,有时候一个通话有很多通话后的工作记录。我的客户希望我根据通话的开始时间挑选出第一条记录,并仅采用这一行数据。

它被建议使用RANKING功能,但我不熟悉这个任何身体有什么想法?

如果有什么需要解释进一步让我知道。

谢谢

回答

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 
+0

嗨,我正在使用SQL SERVER 2012我会给这个欢呼 – 2013-03-25 17:02:07

相关问题