2017-01-14 2 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 - да, обновлено –

Смежные вопросы