Sử dụng MS Access. Tôi xin lỗi rằng tiêu đề là mơ hồ - tôi chỉ không biết chính xác làm thế nào để mô tả loại vấn đề này là gì, tôi chỉ biết rằng tôi cần phải tham gia hai bảng hoặc truy vấn để giải quyết nó.Truy cập câu hỏi SQL tham gia
Tôi có một bảng OrgHistory
cho thấy mà tổ chức mỗi người (bằng ID) tham gia vào một ngày nhất định (bạn chỉ có thể là một thành viên của một org tại một thời điểm):
Person | Org | JoinDate
-----------------------
123 | abc | 3/2/2011
456 | abc | 4/23/1925
123 | def | 5/12/2011
Tôi cũng có một Activities
bảng:
Person | Activity | ActivityDate
--------------------------------
123 | eat | 3/23/2011
123 | sleep | 6/25/2011
456 | walk | 7/20/1985
tôi muốn tìm hiểu, cho mỗi bản ghi trong Activities
, mà tổ chức người là thành viên của hành kể từ ngày hoạt động. Tôi nghĩ rằng điều này có thể liên quan đến việc chuyển đổi các giá trị JoinDate
thành một tập hợp các dải và phù hợp với khoảng thời gian thích hợp, nhưng tôi hơi bối rối về cách thiết kế truy vấn trong trường hợp này - cách tạo phạm vi và khớp giá trị riêng lẻ cho một phạm vi?
Tôi không nghĩ rằng partition()
sẽ hoạt động vì tôi không cố gắng giữ nhiều giá trị JoinDate
trong số lượng đã biết của nhóm.
Tôi đồng ý 'OrgHistory' bảng của bạn thiếu một' thuộc tính LeaveDate': bạn nên thêm cột 'LeaveDate' mới vào bảng cơ sở của bạn, thêm khóa được sắp xếp để đảm bảo các dấu chấm không thể trùng lặp cho cùng một người (gợi ý: bạn cần ràng buộc' CHECK'), sau đó chà dữ liệu ** một lần ** (@ Banjoe's truy vấn có vẻ đầy hứa hẹn cho điều này). – onedaywhen
+1 @onedaywhen - để sử dụng ngày nghỉ thay vì boolean hoạt động/không hoạt động. Nhiều người không xem xét phải quay lại lịch sử để tìm kiếm tư cách thành viên. – JeffO