मेरे पास 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%'
लेकिन यह सभी फोन को बार-बार खींचेगा। मिन (फोन) की आवश्यकता है। क्या आप क्लॉज में एग्रीगेट का इस्तेमाल कर सकते हैं?
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;
आप इसे 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
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।