Tôi đang sử dụng PostgreSQL 9.1 với ứng dụng Ruby on Rails.
Tôi đang cố gắng liệt kê phiên bản cuối cùng của mỗi "khoản phí" (trong bảng lịch sử của mình: hist_version_chargees) thuộc cùng một id dự án (proj_sous_projet_id = 2).
Điều này khiến tôi sử dụng hàm tổng hợp max () và áp dụng kết quả cho hàm THAM GIA trên cùng một bảng vì PostgreQuery không cho phép sử dụng các cột trong mệnh đề SELECT nếu chúng không xuất hiện trong mệnh đề GROUP BY, ALTHOUGH sử dụng max () có nghĩa là rõ ràng tôi quan tâm đến hàng chứa các giá trị tối đa!
Đây là truy vấn của tôi:
SELECT h_v_charges.*,
max(last_v.version) as lv
FROM hist_versions_charges h_v_charges
JOIN hist_versions_charges last_v
ON h_v_charges.version = lv
AND h_v_charges.proj_charge_id = last_v.proj_charge_id
GROUP BY last_v.proj_sous_projet_id,
last_v.proj_charge_id
HAVING last_v.proj_sous_projet_id = 2
ORDER BY h_v_charges.proj_charge_id ASC;
Thông báo lỗi tôi nhận được:
ERROR: column "lv" does not exist
LINE 1: ..._versions_charges last_v ON h_v_charges.version = lv AND h_v...
^
********** Error **********
ERROR: column "lv" does not exist
SQL state: 42703
Character: 147
Tôi cũng đã thử với "last_v.lv" nhưng lỗi vẫn như cũ.
Nếu bất cứ ai có ý tưởng về những gì sai, cô ấy được chào đón nhiều hơn.
=== CẬP NHẬT ===
Theo * a_horse_with_no_name * và câu trả lời của Colin , cuối cùng tôi đã kết thúc với truy vấn sau:
SELECT *
FROM (
SELECT *, max(version) OVER (PARTITION BY proj_charge_id) AS lv
FROM hist_versions_charges
WHERE proj_sous_projet_id = 2) AS hv
WHERE hv.lv = hv.version
ORDER BY hv.proj_charge_id ASC;
Nó nhanh hơn một chút với một ĐẶT HÀNG B BYNG.
Tôi cũng đã thử truy vấn với mệnh đề CÓ. Mặc dù "đẹp hơn", nó tạo ra phí xử lý bổ sung. Vì tôi biết tôi sẽ không sử dụng lại trong tương lai truy vấn phụ hai lần trở lên trong cùng một truy vấn chính, tôi vẫn ổn khi sử dụng truy vấn phụ đơn giản.
Dù sao cũng cảm ơn * a_horse_with_no_name * và Colin 't Hart . Tôi đã học được nhiều điều!
SELECT
danh sách) trong FROM
mệnh đề (thực ra là ON
phần nhưng vẫn nằm trong mệnh đề TỪ)!