2015-12-30 77 views
0

我有这样的查询:获取不同记录的最大值

SELECT distinct(A.EMP_ID), C.MAINT_ID 
FROM EMPLOYEE_MASTER A 
LEFT OUTER JOIN DESIGNATION_MAINTENANCE C ON A.EMP_ID = C.EMP_ID 

它返回下面的输出。

EMP_ID |MAINT_ID 
---------------- 
15  NULL 
16  NULL 
17  NULL 
18  1 
18  2 
18  3 
19  NULL 
20  NULL 
21  4 
21  5 
22  NULL 
23  NULL 

现在实际结果我需要的是

  • 获取最大maint_id为的Emp _id,并仅显示最高纪录。

例如Emp_id 18有三条记录。但我需要的最大一个,即maint_id = 3

所以,我预计,输出类似

EMP_ID MAINT_ID 
------------------  
15 NULL 
16 NULL 
17 NULL 
18 3 
19 NULL 
20 NULL 
21 5 
22 NULL 
23 NULL 

我已经试过到目前为止

SELECT 
    (A.EMP_ID), C.MAINT_ID 
FROM 
    EMPLOYEE_MASTER A 
LEFT OUTER JOIN 
    DESIGNATION_MAINTENANCE C ON A.EMP_ID = C.EMP_ID 
           AND C.MAINT_ID = (SELECT TOP(1) MAINT_ID 
               FROM DESIGNATION_MAINTENANCE 
               ORDER BY MAINT_ID DESC) 

返回:

EMP_ID MAINT_ID 
------------------ 
15 NULL 
16 NULL 
17 NULL 
18 NULL 
19 NULL 
20 NULL 
21 5 
22 NULL 
23 NULL 

这不是我的期望。怎么做?任何帮助表示赞赏

+0

提供给我们SQL小提琴。 –

+0

这不就是'A.EMP_ID,MAX(C.MAINT_ID)FROM ... GROUP BY EMP_ID'吗? –

+0

[如何获取基于最大日期的不同记录?]可能的重复(http://stackoverflow.com/questions/23336663/how-to-get-the-distinct-records-based-on-maximum-date) –

回答

1

你可以简单的使用MAX并添加GROUP BY子句中如下:

SELECT (A.EMP_ID) 
     ,MAX(C.MAINT_ID) MAINT_ID 
FROM EMPLOYEE_MASTER A 
LEFT OUTER JOIN DESIGNATION_MAINTENANCE C ON A.EMP_ID = C.EMP_ID 
GROUP BY A.EMP_ID 

或者,如果你想使用子查询这个可怜的解决方案,请尝试以下操作:

SELECT (A.EMP_ID) 
     ,C.MAINT_ID 
FROM EMPLOYEE_MASTER A 
LEFT OUTER JOIN DESIGNATION_MAINTENANCE C ON A.EMP_ID = C.EMP_ID AND 
       C.MAINT_ID =(select top(1) MAINT_ID from DESIGNATION_MAINTENANCE C1 WHERE C.EMP_ID = C1.EMP_ID ORDER BY MAINT_ID DESC) 
+0

其实我已经发布了一条查询。有很多列,所以使用group可能无法解决我的问题。 –

+0

@ShreyasBhandimatt - 请编辑你的问题,然后提供一个*逼真*的例子和预期的结果。我们不介意读者。 –

0

尝试这个:

SELECT (A.EMP_ID) 
    ,C.MAINT_ID FROM 
       EMPLOYEE_MASTER A LEFT OUTER JOIN 
(SELECT EMP_ID, MAX(MAINT_ID) AS MAINT_ID FROM DESIGNATION_MAINTENANCE GROUP   BY EMP_ID) C 
       ON A.EMP_ID = C.EMP_ID 
       ;