मेरे पास ये दो टेबल हैं। सब्सक्राइबर टेबल में सब्सक्राइबर आईडी और उसका फोन नंबर होता है। NetworkP2P कंटेंट सब्सक्राइबर आईडी, जिसे उसने एड्रेसी नंबर पर कॉल किया है और जब कॉल शुरू हुई, तो समाप्त हो गई।

TABLE Subscriber 
(
    SubscriberID int,
    PhoneNumber char(10)
)

TABLE NetworkP2P 
(
    SubscriberID int,
    AddresseeNumber char(10),
    CallStart datetime,
    CallEnd datetime
)

उदाहरण डेटा:

सदस्य

SubscriberID | PhoneNumber
1              613-555-0156
2              613-555-0112
3              613-555-0119
4              613-555-0182

नेटवर्कP2P

SubscriberID | AddresseeNumber | CallStart               | CallEnd
1              613-555-0182      2013-02-03 08:27:00.000   2013-02-03 08:30:54.000
1              613-555-0119      2013-02-03 10:11:26.000   2013-02-03 10:14:26.000
1              613-555-3333      2013-02-03 15:13:58.000   2013-02-03 15:18:13.000
2              613-555-0156      2013-02-05 23:21:50.000   2013-02-05 23:24:50.000
2              613-555-0119      2013-04-05 23:21:50.000   2013-04-05 23:26:50.000
3              613-555-0112      2013-06-05 23:21:50.000   2013-06-05 23:26:50.000

सभी फ़ोन नंबर उन नंबरों से मेल नहीं खाते जो सब्सक्राइबर्स के पास होते हैं।

मैं इस पर कैसे संपर्क करूंगा, अगर मैं चाहता हूं कि कौन से आउटपुट सब्सक्राइबर हों जो किसी दिए गए महीने के लिए एक-दूसरे के संपर्क में रहे हैं, यानी सब्सक्राइबर 1 को सब्सक्राइबर 2 और इसके विपरीत कहा जाता है?

वांछित आउटपुट का उदाहरण:

 Caller | Reciever | CallerPhone | RecieverPhone
 1        4          613-555-0156  613-555-0182
 1        3          613-555-0156  613-555-0119
 2        1          613-555-0112  613-555-0156
 2        3          613-555-0112  613-555-0119
 3        2          613-555-0119  613-555-0112
1
Marius 25 पद 2021, 11:57
ऐसा लगता है कि आप शामिल होना चाहते हैं। आपने क्या प्रयास किया है? समस्या वास्तव में क्या है?
 – 
Serg
25 पद 2021, 12:15
यह एक त्रुटिपूर्ण मॉडल प्रतीत होता है, आप निश्चित रूप से एक कॉलर आईडी और एक रिसीवर आईडी के साथ जानकारी लॉग करेंगे - संख्या एक जुड़ने की स्थिति नहीं होनी चाहिए - जब कोई अपना नंबर बदलता है तो क्या होता है?
 – 
Stu
25 पद 2021, 12:21
1
मेरी प्रदान की गई जानकारी को बेहतर बनाने की दिशा में कार्य करना। मैं समझता हूं कि डेटा मॉडल अजीब है, यह उत्पादन में नहीं जा रहा है, वहां पहले से ही गलतियां थीं, मैं बस खुद को शिक्षित करने की कोशिश कर रहा हूं।
 – 
Marius
25 पद 2021, 12:23

1 उत्तर

सबसे बढ़िया उत्तर

आपका मॉडल गलत नहीं है जैसा कि टिप्पणियों में सुझाया गया है - आपके नेटवर्कपी2पी में केवल एक कॉलम (रिसीवर) गायब हो सकता है, जो वैकल्पिक विदेशी कुंजी के रूप में काम कर सकता है (आपके वाक्य को संतुष्ट करने के लिए "सभी फोन नंबर उन लोगों से मेल नहीं खाते हैं जो सब्सक्राइबर्स के पास हैं।"), लेकिन यह संबंधपरक तालिका से अधिक लॉग दिखता है।

आपके वांछित आउटपुट के लिए क्वेरी:

select
    caller.SubscriberID as Caller,
    reciever.SubscriberID as Reciever,
    caller.PhoneNumber as CallerPhone,
    nt.AddresseeNumber as RecieverPhone, -- better than reciever.PhoneNumber because you can use left join recievers to get missing substribers
    nt.CallStart,
    nt.CallEnd
from Subscriber as caller
inner join NetworkP2P as nt
    on nt.SubscriberID = caller.SubscriberID
inner join Subscriber as reciever
    on nt.AddresseeNumber = reciever.PhoneNumber
-- where '2021-02-03' between nt.CallStart and nt.CallEnd -- calls in 2021-02-03
-- where nt.CallStart between '2021-02-01' and '2021-02-28' -- calls in specific interval
-- where eomonth(nt.CallStart) = eomonth('2021-02-01') -- calls in specific month

आपको अपनी सभी तालिकाओं के लिए हमेशा डेटाबेस स्कीमा का उपयोग करना चाहिए (उदाहरण के लिए dbo.Subcriber)।

1
Deadsheep39 25 पद 2021, 13:05