Como podemos descobrir se os funcionários já tiraram férias de um ano fiscal com uma consulta? Esta empresa em particular considera que a duração do seu ano fiscal consiste aproximadamente no trimestre de outono do ano atual, no trimestre de inverno e no trimestre de primavera do próximo ano.
digamos que temos uma tabela que contém todos os funcionários como eid (string).
Em seguida, uma tabela de programação (em vez de tabela de férias) como eid (string), departid (string), trimestre (string), ano (inteiro). Recebemos uma tabela de programação para descobrir se todos os funcionários tiram férias de um ano fiscal ou apenas mais.
employees
+-----+
| id |
+-----+
| e01 |
+-----+
| e02 |
+-----+
| e03 |
+-----+
| e04 |
+-----+
schedule
+----+-------------+-------------+-------------+
| eid| departid | quarter | year |
+----+-------------+-------------+-------------+
| e01| marketing01 | Winter | 2013 |
+----+-------------+-------------+-------------+
| e01| marketing01 | Fall | 2013 |
+----+-------------+-------------+-------------+
| e01| marketing01 | Fall | 2013 |
+----+-------------+-------------+-------------+
| e01| marketing01 | Fall | 2015 |
+----+-------------+-------------+-------------+
| e01| marketing01 | Fall | 2015 |
+----+-------------+-------------+-------------+
| e01| marketing01 | Fall | 2015 |
+----+-------------+-------------+-------------+
| e01| marketing01 | Fall | 2015 |
+----+-------------+-------------+-------------+
| e02| theboard00 | Spring | 2017 |
+----+-------------+-------------+-------------+
| e02| theboard00 | Winter | 2019 |
+----+-------------+-------------+-------------+
| e02| theboard00 | Winter | 2020 |
+----+-------------+-------------+-------------+
| e02| enginering01| Winter | 2020 |
+----+-------------+-------------+-------------+
| e03| marketing01 | Spring | 2018 |
+----+-------------+-------------+-------------+
| e03| marketing01 | Spring | 2020 |
+----+-------------+-------------+-------------+
| e03| marketing01 | Spring | 2020 |
+----+-------------+-------------+-------------+
| e04| marketing01 | Spring | 2019 |
+----+-------------+-------------+-------------+
| e04| marketing01 | Spring | 2020 |
+----+-------------+-------------+-------------+
| e04| marketing01 | Spring | 2020 |
+----+-------------+-------------+-------------+
| e04| marketing01 | Spring | 2018 |
+----+-------------+-------------+-------------+
| e05| marketing01 | Spring | 2020 |
+----+-------------+-------------+-------------+
| e05| marketing01 | Spring | 2001 |
+----+-------------+-------------+-------------+
| e06| marketing01 | Fall | 2016 |
+----+-------------+-------------+-------------+
| e06| marketing01 | Fall | 2018 |
+----+-------------+-------------+-------------+
| e07| theboard00 | Spring | 2016 |
+----+-------------+-------------+-------------+
| e07| theboard00 | Fall | 2017 |
+----+-------------+-------------+-------------+
A consulta deve retornar e02, e03, e05, e06, e07, pois
e02 work Spring 2017, Winter 2019 (more than year-long vacation)
e03 work Winter 2018, Fall 2020 (more than year-long vacation)
e05 work Fall 2001, Fall 2020 (way more than year-long vacation)
e06 work Fall 2016, Fall 2018 (way more than year-long vacation)
e07 work Spring 2016, Fall 2017 (year-long vacation)
O que tenho até agora, não muito, mas bloqueado por uma coisa:
Select eid
From (bad employees)
bad employees=
Select *
From vacation, employees
where
group by eid, year, quarter
Eu fico preso em uma validação de férias de longo ano fiscal. Qualquer ponteiro é apreciado
Você pode fazer isso com uma auto-junção, agregação e uma condição na HAVING
cláusula:
SELECT v1.eid
FROM vacation v1 INNER JOIN vacation v2
ON v1.year = v2.year - 1
WHERE v1.quarter = 'Fall' AND v1.quarter <> v2.quarter
GROUP BY v1.eid
HAVING COUNT(*) = 2
E se você quiser os detalhes dos funcionários:
SELECT * FROM employees
WHERE id IN (
SELECT v1.eid
FROM vacation v1 INNER JOIN vacation v2
ON v1.year = v2.year - 1
WHERE v1.quarter = 'Fall' AND v1.quarter <> v2.quarter
GROUP BY v1.eid
HAVING COUNT(*) = 2
)
Veja a demonstração .
Resultados:
Eu iria |
---|
e01 |
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras