Tôi có hai bảng trong SQL và tôi cần có khả năng thực hiện tham gia dựa trên dấu thời gian trong bảng B sớm hơn hoặc bằng dấu thời gian trong bảng A.Truy vấn SQL để tham gia hai bảng dựa trên dấu thời gian gần nhất
vì vậy, đây là một số dữ liệu giả cho hai bảng và đầu ra mong muốn:
các trường hợpĐóng (Bảng A)
| id | resolution | timestamp | ------------------------------------------------ | 1 | solved | 2006-10-05 11:55:44.888153 | | 2 | closed | 2007-10-07 12:34:17.033498 | | 3 | trashed | 2008-10-09 08:19:36.983747 | | 4 | solved | 2010-10-13 04:28:14.348753 |
Phân loại (Bảng B)
| id | value | timestamp | ------------------------------------------------- | 1 | freshman | 2006-01-01 12:02:44.888153 | | 2 | sophomore | 2007-01-01 12:01:19.984333 | | 3 | junior | 2008-01-01 12:02:28.746149 |
kết quả mong muốn
| id | resolution | timestamp | value | -------------------------------------------------------------- | 1 | solved | 2006-10-05 11:55:44.888153 | freshman | | 2 | closed | 2007-10-07 12:34:17.033498 | sophomore | | 3 | trashed | 2008-10-09 08:19:36.983747 | junior | | 4 | solved | 2010-10-13 04:28:14.348753 | junior |
Vì vậy, tôi biết mã cần nhìn như sau, tôi chỉ không thể tìm ra phải làm gì với phần ON
của JOIN
($ 1 và 2 đô la là các biến số sẽ được chuyển vào):
SELECT case.id, case.resolution, case.timestamp, class.value
FROM closed_cases AS case
LEFT JOIN classifications AS class ON ???
WHERE case.timestamp BETWEEN $1 AND $2;
Tôi biết tôi có thể sử dụng một lựa chọn phụ, nhưng điều này sẽ hoạt động tại le ast một vài nghìn hàng, có lẽ nhiều hơn, và tôi cần nó rất nhanh; vì vậy tôi đã hy vọng cho một mệnh đề đơn giản có thể làm điều đó.
Tôi nghĩ rằng bạn sẽ cần phụ chọn của bạn. Bạn đã thử nghiệm hiệu suất và thấy nó không thể chấp nhận? – Beth
nếu phiên bản SQL bạn đang sử dụng hỗ trợ chức năng phân tích cửa sổ, bạn có thể thực hiện nó mà không cần chọn phụ, nhưng một số phiên bản của SQL không hỗ trợ chúng. Đối với một lựa chọn phụ trên một vài nghìn hàng, hiệu suất không được quá tệ. (Việc lựa chọn phụ sẽ được trên bảng phân loại - điều này thực sự sẽ có nhiều hơn một vài nghìn hàng?) –
@Mark - Thực ra, hãy nghĩ về nó, bảng phân loại phải có hàng ít hơn so với tôi kiểm tra xem liệu dữ liệu đã thực sự thay đổi từ phiên bản mới nhất chưa.Vì vậy, tôi đoán phụ chọn sẽ làm việc tốt, nhưng tôi nghĩ rằng việc thêm thời gian kết thúc là một giải pháp sạch hơn. –