Để bắt đầu, bạn không thể làm điều này:
having rid!=MAX(rid)
Mệnh đề HAVING chỉ có thể chứa những thứ là thuộc tính của các nhóm tổng hợp.
Ngoài ra, 1, 2, 3
không hợp lệ trong GROUP BY trong SQL Server - Tôi nghĩ điều đó chỉ hợp lệ trong ORDER BY.
Bạn có thể giải thích tại sao đây không phải là thứ bạn đang tìm kiếm không:
select
LEFT(SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000))-1),
qvalues.name,
qvalues.compound,
MAX(qvalues.rid)
from batchinfo join qvalues on batchinfo.rowid=qvalues.rowid
where LEN(datapath)>4
group by LEFT(SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(batchinfo.datapath, PATINDEX('%[0-9][0-9][0-9]%', batchinfo.datapath), 8000))-1),
qvalues.name,
qvalues.compound