سلام
من یه جدولی دارم که شامل فیلدهای ( کد ملی ، سریال Cpu، سریال رم، سریال هارد، تاریخ تحویل و ... هست این جدول اطلاعات سخت افزاری سیستم ها را در مورد اینکه الان تحویل چه کسی هستن رو مشخص میکنه ممکنه شخصی دو سیستم تحویلش باشه.
اگر من بخوام یه گزارشی از وضعیت کلیه سیستم ها بگیرم مشکلاتی وجود داره:
من این دستور رو نوشتم:
Ncode=کد ملی و Adate= تاریخ تحویل
select * from allocate where Adate in(select max(Adate) from Allocate group by Ncode)

مشکلات این دستور
1- کلید اصلی این جدول رو اگر کد ملی تعیین کنم که نمیشه ، به نظر شما باید همه فیلدها را کلید تعیین کنم؟
2- اینکه در select داخلی به درستی آخرین تاریخ های تحویلی که برای هر شخص ثبت شده را برمیگردونه ولی select بیرونی ممکنه رکوردهای دیگه هم که تاریخشون با تاریخ تحویل مورد نظر یکیه برگردونده میشه
3- اینه که فرض کنید شخصی دو سیستم تحویلشه ، من اگر از group by استفاده کنم با الگوریتم بالا تنها میتونم برای هر شخص یک رکورد برگردونم ، فرض کنید شخصی تاریخ 01/15 سیستمی رو تحویل گرفته و 01/20 سیستم دیگه ای رو تحویل گرفته