0

我有一个有两个表的数据库。一个Call_Info表,其中包含有关传入/传出呼叫的详细信息,并具有一个名为 的唯一 ID Call_ID。我有第二个表,它被链接并称为该After_Call_Work表。

每次通话将只有一个通话后工作记录。数据集有点混乱,对于同一个呼叫,偶尔会有 3 或 4 个后呼叫工作记录。在进行查询时,我怎样才能只检索该特定呼叫的最早的呼叫后工作记录而忽略其余的?我想象使用 SQL 函数 First_Value 但它似乎不是正确的。

使用 Microsoft SQL Server 2012。

有任何想法吗?

4

3 回答 3

0

这可以通过利用Window Function

WITH call_List
AS
(
    SELECT  Call_ID, OtherColumns, DateColumn,
            ROW_NUMBER() OVER (PARTITION BY Call_ID ORDER BY DateColumn ASC) rn
    FROM    After_Call_Work 
)
SELECT  a.*, b.OtherColumns, b.DateColumn
FROM    Call_Info a
        INNER JOIN call_List b
            ON a.Call_ID = b.Call_ID
WHERE   b.rn = 1
于 2013-03-14T11:27:47.267 回答
0

你应该可以使用select top,像这样:

SELECT TOP 1
FROM call_info ci JOIN after_call_work acw ON ci.call_id=acw.call_id
ORDER BY acw.work_time DESC
WHERE ci.call_id=<your_call_id>
于 2013-03-14T11:28:34.853 回答
0
 WITH g AS (SELECT ROW_NUMBER() OVER (PARTITION BY callid 
ORDER BY date ASC) AS row,* from after_call_work
select * from call_info cinfo inner join g on 
cinfo.callid = g.callid and g.row=1
于 2013-03-14T11:53:55.387 回答