このようなものをお探しですか?
SELECT l.I_empid, l.I_empname, l.I_Earnleave, l.I_FromDate
FROM
(
SELECT I_empid, MAX(I_FromDate) I_FromDate
FROM v_leaveallocation_ms
WHERE i_departmentid = 2
GROUP BY I_empid
) q JOIN v_leaveallocation_ms l
ON q.I_empid = l.I_empid
AND q.I_FromDate = l.I_FromDate
サブクエリでは、MAX(I_FromDate)
perI_empid
を取得してからテーブルに結合して、対応する行から他の列を取得します。
2番目のアプローチは、ROW_NUMBER()
分析関数を使用することです
SELECT I_empid, I_empname, I_Earnleave, I_FromDate
FROM
(
SELECT I_empid, I_empname, I_Earnleave, I_FromDate,
ROW_NUMBER() OVER (PARTITION BY I_empid ORDER BY I_FromDate DESC) rnum
FROM v_leaveallocation_ms
WHERE i_departmentid = 2
) q
WHERE rnum = 1
出力:
| | I_EMPID | I_EMPNAME | I_EARNLEAVE | I_FROMDATE |
|---------|---------------|-------------|--------- --------------------------|
| | 21 | ローレンス | ローレンス | 24 | 2013 年 9 月 16 日 00:00:00+0000 |
| | 28 | NRサンタラム | 12 | 2013 年 11 月 11 日 00:00:00+0000 |
これがSQLFiddleデモです(両方のクエリ用)