2011-09-14 17 views
8

प्रश्न में शामिल हों। मुझे खेद है कि शीर्षक अस्पष्ट है - मुझे बिल्कुल यह नहीं पता कि यह किस प्रकार की समस्या का वर्णन करना है, मुझे पता है कि मुझे इसे हल करने के लिए दो तालिकाओं या प्रश्नों में शामिल होने की आवश्यकता है।एक्सेस एसक्यूएल एमएस एक्सेस का उपयोग कर

Person | Org | JoinDate 
----------------------- 
123 | abc | 3/2/2011 
456 | abc | 4/23/1925 
123 | def | 5/12/2011 

मैं भी एक है:

मैं एक OrgHistory तालिका से पता चलता है कि जो संगठन प्रत्येक व्यक्ति (आईडी के आधार पर) एक निश्चित तिथि पर शामिल हो गए (आप केवल एक समय में एक संगठन के एक सदस्य हो सकता है) है Activities तालिका:

Person | Activity | ActivityDate 
-------------------------------- 
123 | eat  | 3/23/2011 
123 | sleep | 6/25/2011 
456 | walk  | 7/20/1985 

मैं, पता लगाने के लिए Activities में प्रत्येक रिकॉर्ड है, जो संगठन व्यक्ति गतिविधि की तिथि पर के सदस्य थे के लिए चाहते हैं। मुझे लगता है कि इसमें JoinDate मानों को श्रेणियों के एक सेट में परिवर्तित करना और उचित अंतराल पर ActivityDate से मिलान करना शामिल हो सकता है, लेकिन मैं इस मामले में क्वेरी को डिज़ाइन करने के बारे में थोड़ा उलझन में हूं - मैं श्रेणियां कैसे बना सकता हूं और मेल खाता हूं एक सीमा के लिए व्यक्तिगत मूल्य?

मुझे नहीं लगता कि partition() काम करेगा क्योंकि मैं कई ज्ञात बाल्टी में JoinDate मान रखने की कोशिश नहीं कर रहा हूं।

+0

मैं मानता हूँ अपने 'OrgHistory' तालिका एक' LeaveDate' विशेषता अनुपलब्ध है: आप अपनी बेस टेबल पर एक नया 'LeaveDate' कॉलम जोड़ना चाहिए, यह सुनिश्चित करने के लिए अनुक्रमित कुंजी जोड़ें कि अवधि एक ही व्यक्ति के लिए ओवरलैप नहीं हो सकती है (संकेत: आपको' चेक 'बाधा की आवश्यकता है), फिर डेटा को एक बार ** ** (@ बंजजो क्वेरी इस के लिए वादा करता है)। – onedaywhen

+0

+1 @onedaywhen - सक्रिय/असुरक्षित बूलियन की बजाय छुट्टी तिथि का उपयोग करने के लिए। कई लोग सदस्यता पाने के लिए ऐतिहासिक रूप से वापस जाने पर विचार नहीं करते हैं। – JeffO

उत्तर

5

मैं वादा करता हूँ नहीं कर सकते इस लिए सबसे कारगर तरीका है, लेकिन यह परीक्षण डेटा आपके द्वारा दी गई Access में काम करता है:

SELECT a.person, a.activity, 
     (
     SELECT TOP 1 org 
      FROM orghistory AS o 
     WHERE o.person = a.person 
       AND o.joindate <= a.activitydate 
     ORDER 
      BY o.joindate DESC 
     ) AS Org 
    FROM activities AS a; 
+0

धन्यवाद! शीर्ष सदस्यता दिनांक लेने के बारे में अच्छा विचार है <= गतिविधि की तारीख, जो बहुत समझ में आता है। – sigil

संबंधित मुद्दे