Các cột trong tập hợp kết quả của select
truy vấn với nhóm group by
mệnh đề phải là:
- một biểu thức được sử dụng như một trong nhóm
group by
tiêu chí hoặc ... - một hàm tổng hợp hoặc ...
- một giá trị theo nghĩa đen
Vì vậy, bạn không thể làm những gì bạn muốn trong một truy vấn đơn giản. Điều đầu tiên cần làm là nêu vấn đề của bạn một cách rõ ràng, chẳng hạn như:
Đưa ra
create table dbo.some_claims_table
(
claim_id int not null ,
group_id int not null ,
date_created datetime not null ,
constraint some_table_PK primary key ( claim_id ) ,
constraint some_table_AK01 unique ( group_id , claim_id ) ,
constraint some_Table_AK02 unique ( group_id , date_created ) ,
)
Điều đầu tiên cần làm là xác định ngày tạo gần đây nhất cho mỗi nhóm:
select group_id ,
date_created = max( date_created )
from dbo.claims_table
group by group_id
Điều đó cung cấp cho bạn tiêu chí lựa chọn mà bạn cần (1 hàng cho mỗi nhóm, với 2 cột:group_id và ngày tạo highwater) để hoàn thành phần đầu tiên của yêu cầu (chọn hàng riêng lẻ từ mỗi nhóm. Đó cần phải là một bảng ảo trong select
truy vấn:
select *
from dbo.claims_table t
join ( select group_id ,
date_created = max( date_created )
from dbo.claims_table
group by group_id
) x on x.group_id = t.group_id
and x.date_created = t.date_created
Nếu bảng không phải là duy nhất bởi date_created
trong group_id
(AK02), bạn có thể nhận được các hàng trùng lặp cho một nhóm nhất định.