WITH EMP (DEPTNUM, HIREDATE) AS
(
-- Sample Data Block
-- You may replace it by your own SELECT statement
-- returning the same columns
VALUES
(10, DATE('2017-01-01'))
, (10, DATE('2017-01-01'))
, (10, DATE('2018-01-01'))
, (10, DATE('2019-01-01'))
, (11, DATE('2017-01-01'))
, (11, DATE('2017-01-01'))
, (11, DATE('2018-01-01'))
, (11, DATE('2018-01-01'))
, (11, DATE('2019-01-01'))
, (12, DATE('2016-01-01'))
, (12, DATE('2017-01-01'))
, (12, DATE('2018-01-01'))
, (13, DATE('2016-01-01'))
, (13, DATE('2017-01-01'))
, (13, DATE('2018-01-01'))
, (13, DATE('2019-01-01'))
-- End of Sample Data Block
)
, HIRE_YEAR AS
(
-- All hiring years by department
SELECT DISTINCT DEPTNUM, YEAR(HIREDATE) AS HIREYEAR
FROM EMP
)
, HIRE_CNT AS
(
-- Count of hiring years by department
SELECT DEPTNUM, COUNT(1) AS YEAR_CNT
FROM HIRE_YEAR
GROUP BY DEPTNUM
)
, AGG AS
(
-- Count of THE SAME hiring years for other departments
SELECT H.DEPTNUM, COUNT(1) AS COUNT
FROM HIRE_YEAR H10
JOIN HIRE_YEAR H ON H.DEPTNUM <> H10.DEPTNUM AND H.HIREYEAR = H10.HIREYEAR
WHERE H10.DEPTNUM = 10
GROUP BY H.DEPTNUM
)
-- Count of the same hiring years for a department
-- must be equal to TOTAL COUNT:
-- for DEPTNUM = 10
-- and for this DEPTNUM itself, if there is an additional requirement for this department
-- to hire the same years ONLY as DEPTNUM = 10 (commented out below)
SELECT A.*
FROM AGG A
JOIN HIRE_CNT H10 ON H10.DEPTNUM = 10 AND H10.YEAR_CNT = A.COUNT
--JOIN HIRE_CNT H ON H.DEPTNUM = A.DEPTNUM AND H.YEAR_CNT = A.COUNT
;
|DEPTNUM |COUNT |
|-----------|-----------|
|11 |3 |
|13 |3 |
Вы можете выполнить это утверждение как есть. Можно внести любые изменения в данные выборки, чтобы увидеть, как они влияют на результат.
DEPTNUM = 13
находится в наборе результатов, поскольку у него есть расширенный набор лет найма для DEPTNUM = 10
.
Если найм лет длядругой отдел должен быть точно таким же, просто раскомментируйте последнюю строку.