2017-01-14 34 views
0

我正在做一个SQL查询的最早日期,我需要一些帮助如何找到一个SQL表

的问题是:
什么是员工当前的工资,什么是他们的薪水时他们首先开始工作?
(给名,首字母,目前的工资,部门名称,开始日期和工资时,他们开始)

的问题是:
我不断收到所有的日期,我无法找到如何过滤它只显示第一个日期(开始/雇佣日期)。
有什么建议吗?
我的SQL代码如下所示:

SELECT M.NAME, 
     M.FIRSTLETTERS, 
     M.MONTHSALARY, 
     D.NAME, 
     H.STARTDATE, 
     H.SALARY 
FROM E_EMPLOYEES M 
     LEFT OUTER JOIN E_DEPARTMENTS A 
        ON M.AFD = A.ANR 
     INNER JOIN E_historie H 
       ON M.MNR = H.MNR 
+0

对不起每个员工的第一份工资,但我真的很新的SQL,都对此有任何更简单的解决方案查询?不管谢谢你回复! – THEoneANDonly

回答

1

您可以使用聚集和keep用于这一目的。查询看起来像:

SELECT M.NAME, M.FIRSTLETTERS, 
     MIN(H.STARTDATE) as STARTDATE, 
     MAX(H.SALARY) KEEP (DENSE_RANK FIRST ORDER BY H.STARTDATE) as FIRST_SALARY, 
     MAX(H.SALARY) KEEP (DENSE_RANK FIRST ORDER BY H.STARTDATE DESC) as LAST_SALARY 
FROM E_EMPLOYEES M INNER JOIN 
    E_DEPARTMENTS A 
    ON M.AFD = A.ANR INNER JOIN 
    E_historie H 
    ON M.MNR = H.MNR 
GROUP BY M.MNR, M.NAME, M.FIRSTLETTERS; 
1

使用ROW_NUMBER找到从历史表

SELECT M.NAME, 
     M.FIRSTLETTERS, 
     M.MONTHSALARY, -- considering this is current salary 
     A.NAME, -- I think there is a typo here Alias name should be A not H 
     H.STARTDATE, 
     H.SALARY 
FROM E_EMPLOYEES M 
     LEFT OUTER JOIN E_DEPARTMENTS A 
        ON M.AFD = A.ANR 
     INNER JOIN (SELECT Row_number()OVER(partition BY H.MNR ORDER BY H.STARTDATE ASC) AS Rn, 
          H.MNR, 
          H.STARTDATE, 
          H.STARTDATE 
        FROM E_historie H) H 
       ON M.MNR = H.MNR 
WHERE Rn = 1 
+0

我喜欢这种方式,但是...... D.NAME来自哪里? – mauro

+0

@mauro - 是的,更新 –