मेरे पास 2 कॉल टेबल हैं। तालिका 1 में कॉल/क्लाइंट की जानकारी है। तालिका 2 में कॉल लॉग हैं, कॉल के दौरान क्या हुआ। मुझे तालिका 2 से तालिका 1 में शामिल होने की आवश्यकता है, लेकिन केवल पहले फ़ोन के लिए 'समय' खींचें। कॉल लॉग्स में कई 'फ़ोन' होते हैं, पहले वाले के लिए समय चाहिए।

Table 1                             Table 2                                       Goal

Call ID  Client  State            Call ID   Method     Time           Call ID   Client  State  Time
1        John    TX               1         Inbound    11:00          1         John    TX     11:01
2        Mike    CA               1         Phone      11:01          2         Mike    CA     11:31
3        Susan   NA               1         Answer     11:01          3         Susan   NA     ...   
4        ...     ....             1         Phone2     11:05          4
                                  1         Call End   11:22          .         etc
                                  2         Inbound    11:30
                                  2         Phone      11:31

किंडा कुछ ऐसा करना चाहता है।

SELECT *
FROM Table1 t1 on Table2 t2 = t1.call_id = t2.call_id and t2.Method like '%Phone%'

लेकिन यह सभी फोन को बार-बार खींचेगा। मिन (फोन) की आवश्यकता है। क्या आप क्लॉज में एग्रीगेट का इस्तेमाल कर सकते हैं?

-1
Dylan 7 मार्च 2020, 23:22

2 जवाब

नहीं, आप on क्लॉज में एग्रीगेशन का इस्तेमाल नहीं कर सकते। इसके बजाय, apply का उपयोग करें:

SELECT *
FROM Table1 t1 CROSS APPLY
     (SELECT TOP (1) t2.*
      FROM Table2 t2 
      WHERE t2.call_id = t1.call_id and 
            t2.Method like '%Phone%'
      ORDER BY phone
     ) t2;
0
Gordon Linoff 7 मार्च 2020, 23:27

आप इसे ROW_NUMBER() विंडो फ़ंक्शन के साथ कर सकते हैं:

select t1.*, t2.time
from table1 t1 inner join (
  select *, row_number() over (partition by callid order by time) rn
  from table2
  where method like '%Phone%'
) t2 on t2.callid = t1.callid
where t2.rn = 1

या:

select t1.*, 
  (select min(time) from table2 where method like '%Phone%' and callid = t1.callid) time
from table1 t1
0
forpas 7 मार्च 2020, 23:50