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 的招聘年限的超集。
如果另一个部门的招聘年限必须完全相同,只需取消最后一行的注释即可。