0

2 つのテーブルを持つデータベースがあります。Call_Info着信/発信通話に関する詳細を保持し、 という名前の一意の ID を持つテーブルCall_ID。リンクされ、テーブルと呼ばれる2番目のテーブルがありAfter_Call_Workます。

各通話には、アフター コール ワーク レコードが 1 つだけあります。データセットは少し混乱しており、同じ通話に対して、通話後の作業レコードが 3 つまたは 4 つあることがあります。クエリを実行するときに、残りを無視してその特定の通話の最も早いアフター コール ワーク レコードを取得するにはどうすればよいですか? SQL 関数 First_Value を使用することを想像しましたが、適切ではないようです。

Microsoft SQL Server 2012 を使用しています。

何か案は?

4

3 に答える 3

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 に答える
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 に答える