Зависит от того, в каком порядке вы хотите выполнить фильтрацию:
Настройка Oracle :
CREATE TABLE asg_table ( asg_number, effective_start_date, effective_end_date, location, department, action_code ) AS
SELECT 1, DATE '2019-01-01', DATE '2019-01-20', NULL, 'HR', 'HIRE' FROM DUAL UNION ALL
SELECT 1, DATE '2019-01-21', DATE '2019-02-18', 'Vietnam', 'HR', 'CHANGE_ASG' FROM DUAL UNION ALL
SELECT 1, DATE '2019-02-19', DATE '4712-12-31', 'Vietnam', 'Management', 'CHANGE_ASG' FROM DUAL UNION ALL
SELECT 2, DATE '2019-03-02', DATE '2019-04-29', 'Peru', 'HR', 'HIRE' FROM DUAL UNION ALL
SELECT 2, DATE '2019-04-30', DATE '2019-05-01', 'Vietnam', 'HR', 'CHANGE_ASG' FROM DUAL UNION ALL
SELECT 2, DATE '2019-05-01', DATE '2019-06-01', 'Vietnam', 'HR', 'FIRE' FROM DUAL UNION ALL
SELECT 2, DATE '2019-06-01', DATE '4712-12-31', NULL, 'HR', 'HIRE' FROM DUAL;
Запрос 1 :
Если вы хотите отфильтровать, где location
- это NULL
, а action_code
- это сначала HIRE
, а затем найдите самый ранний effective_start_date
для каждого asg_number
, затем:
SELECT *
FROM (
SELECT t.*,
ROW_NUMBER() OVER ( PARTITION BY asg_number ORDER BY effective_start_date ASC ) rn
FROM asg_table t
WHERE location IS NULL
AND action_code = 'HIRE'
)
WHERE rn = 1
Вывод :
ASG_NUMBER | EFFECTIVE_START_DATE | EFFECTIVE_END_DATE | LOCATION | DEPARTMENT | ACTION_CODE | RN
---------: | :------------------- | :----------------- | :------- | :--------- | :---------- | -:
1 | 2019-01-01 | 2019-01-20 | <em>null</em> | HR | HIRE | 1
2 | 2019-06-01 | 4712-12-31 | <em>null</em> | HR | HIRE | 1
Запрос 2 :
Если вы хотите найти самые ранние effective_start_date
для каждогоasg_number
, а затем фильтр, где location
равен NULL
, а action_code
равен HIRE
, а затем:
SELECT *
FROM (
SELECT t.*,
ROW_NUMBER() OVER ( PARTITION BY asg_number ORDER BY effective_start_date ASC ) rn
FROM asg_table t
)
WHERE location IS NULL
AND action_code = 'HIRE'
AND rn = 1
Выход :
ASG_NUMBER | EFFECTIVE_START_DATE | EFFECTIVE_END_DATE | LOCATION | DEPARTMENT | ACTION_CODE | RN
---------: | :------------------- | :----------------- | :------- | :--------- | :---------- | -:
1 | 2019-01-01 | 2019-01-20 | <em>null</em> | HR | HIRE | 1
дБ <> скрипка здесь