你在找這樣的嗎?
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)
每I_empid
然後加入你回你的表從相應的行得到其他列。
第二種方法是使用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 | Lawrence | 24 | September, 16 2013 00:00:00+0000 |
| 28 | N.R.Santharam | 12 | November, 11 2013 00:00:00+0000 |
這裏是SQLFiddle演示(兩個查詢)
顯示你的SQL查詢結果替換
row_number()
– sunysen
有沒有重複的,因爲'i_earnleave'的值是不同的。你想要返回勞倫斯的兩個價值中的哪一個? –