PDA

View Full Version : انتخاب آخرین حکم پرسنلی برای هر شخص



HamidNch
پنج شنبه 27 مرداد 1390, 08:08 صبح
سلام خدمت همه بزرگواران.
بنده مشکلی در یه سلکت زدن دارم.که بدین شرح هست:
من دو تا جدول دارم یکی با نام tblEmployee و دیگری tblOrder
که دز جدول اول اسامی و مشخصات پرسنلی و در دومی اطلاعات مربوط به احکام پرسنل را دارا می باشد.
در جدول دومی به ازای هرپرسنل ممکن هست چند رکورد برای حکم در تاریخهای مختلف باشد.
هدف این است که برای هر شخص آخرین حکم ش یعنی حکم دارای تاریخ جدیدتر مشخص گردد.
من اسکریپت زیر رو زدم اما این اشتباه هست:
SELECT FName, LName, Place, tblEmployee.Status, OrderDate, Job
FROM tblOrder, tblEmployee
WHERE (Status = "فعال")
AND (OrderDate Between [date1] And [date2])
AND (Code = EmployeeCode)
GROUP BY FName, LName, Place,Status, OrderDate, Job
ORDER BY OrderDate DESC

یوسف زالی
پنج شنبه 27 مرداد 1390, 11:56 صبح
سلام.
شما به تفکیک پرسنل max روی تاریخ بگیر:
select PRS, Max(Date) from Persons group by PRS
حالا این رو یک derrived table در نظر بگیر که دو تا ستون داره، کافیه یا join بنویسی یا اینکه در where اون فیلتر کنی:

select * from Persons join (select PRS as P, max(Date) as D from persons group by PRS) X on PRS = P and Date = D

یا یه همچین چیزی..

Galawij
پنج شنبه 27 مرداد 1390, 15:01 عصر
Select Top(1) PERCENT, E.Name,MAX(O.date) As MAXDate,O.Status From TbEmployee As E Inner Join TbOrder As O On E.Id=O.Id Group By E.Name,O.Status Order By MAXDate DESC
من با نوع داده Datetime امتحان کردم.

HamidNch
شنبه 29 مرداد 1390, 08:04 صبح
سلام و تشکر به خاطر پاسختون.کد من در حال حاضر بدین گونه هست و هنوز مشکل داره.
SELECT TOP 1 e.Code, e.FName, e.LName, o.Job, Max(o.OrderDate) AS MaxOfOrderDate
FROM tblEmployee AS e
INNER JOIN tblOrder AS o ON e.Code = o.EmployeeCode
GROUP BY e.Code, e.FName, e.LName, o.Job
ORDER BY MaxOfOrderDate DESC

تو قسمت ORDER BY MaxOfOrderDate DESC مقدار MaxOfOrderDate را در حین اجرا طلب می کند.لازم به ذکر است که این کدها قراره در اکسس ران بشه.
با تشکر فراوان

Galawij
شنبه 29 مرداد 1390, 15:52 عصر
من با SQL کد را امتحان کردم که جواب می داد.
در Access تابع MAX کار می کنه و دیگه نیازی به Order by نداره، اگر هم نوشتید به این صورت:

ORDER BY Max(O.date)DESC

از نام مستعار استفاده نکنید، مستقیماً فیلد را با تابع استفاده کنید.