Tôi có truy vấn này ( SQLFiddle ):
SELECT
c.name,
a.user_id,
a.status_id,
a.title,
a.rtime,
u.user_name,
s.status_name
FROM company c
LEFT JOIN action a ON a.company_id=c.id
LEFT JOIN user u ON u.id=a.user_id
LEFT JOIN status s ON s.id=a.status_id
WHERE u.user_name='Morgan'
-- WHERE c.name='Fiddle'
GROUP BY c.id
HAVING a.rtime IS NULL OR a.rtime = (
SELECT max(rtime)
FROM action a2
WHERE deleted IS NULL
AND a2.company_id = c.id
)
Vấn đề 1
Tôi muốn liệt kê tất cả các công ty, và hiển thị cho người dùng và trạng thái nơi họ thực hiện hành động cuối cùng đối với công ty. Đồng thời cho thấy các công ty nơi không có hành động đã được thực hiện.
Vấn đề 2
Tôi cũng cần có khả năng tìm kiếm người dùng theo tên, do đó chọn tất cả các công ty là người dùng này có hoạt động cuối cùng. Truy vấn được tạo từ một biểu mẫu, vì vậy tôi có thể đưa ra các biến.
Hiện tại tôi không thể thay đổi cơ sở dữ liệu SCHema, nhưng lời khuyên cho việc di chuyển trong tương lai sẽ được đánh giá cao hơn nhiều.
Tôi đã thử ràng buộc nó cùng với INNER JOIN ( SELECT.. ) t ON
nhưng tôi không thể quay đầu lại được.
Tôi cũng đã thử các phương pháp từ đây , đây và đây nhưng tôi không thể có được người có hoạt động mới nhất ngay.
Phiên bản MySQL: 5.5.16. Bảng công ty có khoảng 1 hàng máy và bảng hành động ở mức 70K, đang tăng lên. Hiệu suất là quan trọng đối với tôi ở đây.
Làm thế nào điều này có thể được giải quyết?
MAX(Marks)
mỗiTaskID
, bạn muốnMAX(ActivityDate)
mỗiCompany
.) Không có nhiều khác biệt nếu bạn có một bảng hoặc tham gia.