ورود

View Full Version : group by



archi
سه شنبه 10 آذر 1383, 22:39 عصر
سلام
من یه جدول دارم که توش فیلد های زیره :


ID MemberCode Name Mojoodi Date


که هر کس یک کد و یک نام داره ولی موجودی های مختلفی در تاریخ های مختلفی .
حالا می خوام آخرین موجودی هر شخص رو پیدا کنم .یعنی براش یه query بنویسم با فیلدهای زیر:


MemberCode Name Mojoodi Date

ممنون

AminSobati
چهارشنبه 11 آذر 1383, 00:10 صبح
دوست عزیزم،
این بستگی به تعریف شما از آخرین موجودیه یک شخص داره. آیا آخرین موجودیه اون، رکورد مربوطه اش با جدید ترین تاریخ هستش یا ...؟

archi
چهارشنبه 11 آذر 1383, 08:42 صبح
بله استاد.
آخرین موجودی یعنی رکوردی که مقدار تاریخش از بقیه بزرگتر باشه .
بارها توی کوئری های این چنینی گیر کردم. یعنی جایی که group by داریم و باید 3 فیلد نمایش داده بشه . یه چیزی مشابه این :



SELECT Code,Max(Date)From Tbl
Group by Code

با این تفاوت که mojoodi هرکس هم توی SELECT بیاد .یعنی موجودی مربوط به رکوردی که date توی اون رکورد max هست .(چون فیلد سوم توی توابع جمعی نیست خطا می گیره)

AminSobati
چهارشنبه 11 آذر 1383, 14:24 عصر
دوست عزیزم،
برای این کار شما نیاز دارید که ابتدا یک Sub Query جدیدترین تاریخ برای هر فرد رو بدست بیاره، و بعد جدول اصلی رو با این Sub Query که نوشتین Join کنین:

select * from MyTable join
(select MemberCode,max([date]) MyMax from MyTable group by MemberCode) as tmp on
MyTable.MemberCode=tmp.MemberCode and MyTable.[date]=tmp.MyMax