W firmie CyberCorp S.A. jeden z pracowników awansował na stanowisko, którego nigdy wcześniej nie zajmował. Twoim zadaniem jest wykryć, kto mógł sfałszować dane kadrowe.
CREATE TABLE pracownicy (
id INT PRIMARY KEY,
imie VARCHAR(50),
nazwisko VARCHAR(50)
);
CREATE TABLE historia_stanowisk (
id INT PRIMARY KEY,
pracownik_id INT,
stanowisko VARCHAR(100),
data_od DATE,
data_do DATE,
FOREIGN KEY (pracownik_id) REFERENCES pracownicy(id)
);
CREATE TABLE awanse (
id INT PRIMARY KEY,
pracownik_id INT,
stanowisko_docelowe VARCHAR(100),
data_awansu DATE,
FOREIGN KEY (pracownik_id) REFERENCES pracownicy(id)
);
-- Pracownicy
INSERT INTO pracownicy VALUES
(1, 'Jakub', 'Nowak'),
(2, 'Maria', 'Kwiatkowska'),
(3, 'Łukasz', 'Zalewski');
-- Historia stanowisk
INSERT INTO historia_stanowisk VALUES
(1, 1, 'Asystent', '2023-01-01', '2024-01-01'),
(2, 1, 'Starszy Asystent', '2024-01-02', '2025-01-01'),
(3, 2, 'Asystent', '2023-01-01', '2024-06-30'),
(4, 2, 'Kierownik', '2024-07-01', '2025-12-31'),
(5, 3, 'Specjalista IT', '2023-01-01', '2025-12-31');
-- Awans
INSERT INTO awanse VALUES
(1, 3, 'Dyrektor IT', '2025-01-01'); -- Podejrzany awans!
Użyj zapytania SQL, aby znaleźć pracowników, którzy otrzymali awans na stanowisko, którego nigdy wcześniej nie zajmowali.
SELECT p.imie, p.nazwisko, a.stanowisko_docelowe
FROM awanse a
JOIN pracownicy p ON a.pracownik_id = p.id
WHERE NOT EXISTS (
SELECT 1
FROM historia_stanowisk h
WHERE h.pracownik_id = a.pracownik_id
AND h.stanowisko = a.stanowisko_docelowe
);
Spróbuj samodzielnie wykryć oszusta w danych!
Rozszerzone śledztwo kadrowe w firmie CyberCorp S.A. – wykryj wszystkie anomalie w systemie awansów!
SELECT p.imie, p.nazwisko, a.stanowisko_docelowe
FROM awanse a
JOIN pracownicy p ON a.pracownik_id = p.id
WHERE NOT EXISTS (
SELECT 1
FROM historia_stanowisk h
WHERE h.pracownik_id = a.pracownik_id
AND h.stanowisko = a.stanowisko_docelowe
);
SELECT p.imie, p.nazwisko, h.stanowisko AS ostatnie_stanowisko, a.stanowisko_docelowe
FROM pracownicy p
JOIN historia_stanowisk h ON p.id = h.pracownik_id
JOIN awanse a ON p.id = a.pracownik_id
WHERE h.data_do = (
SELECT MAX(data_do) FROM historia_stanowisk WHERE pracownik_id = p.id
)
AND a.stanowisko_docelowe < h.stanowisko; -- Porównanie nazw wymaga standaryzacji!
SELECT p.imie, p.nazwisko, a.stanowisko_docelowe, COUNT(*) AS liczba_awansow
FROM awanse a
JOIN pracownicy p ON p.id = a.pracownik_id
GROUP BY p.id, a.stanowisko_docelowe
HAVING COUNT(*) > 1;
SELECT p.imie, p.nazwisko, h.stanowisko AS poprzednie, a.stanowisko_docelowe, a.data_awansu
FROM pracownicy p
JOIN historia_stanowisk h ON p.id = h.pracownik_id
JOIN awanse a ON p.id = a.pracownik_id
WHERE h.data_do <= a.data_awansu
ORDER BY p.id, a.data_awansu;
SELECT p.imie, p.nazwisko, a.stanowisko_docelowe
FROM awanse a
JOIN pracownicy p ON p.id = a.pracownik_id
JOIN historia_stanowisk h ON h.pracownik_id = p.id
WHERE h.stanowisko = a.stanowisko_docelowe;
SELECT p.imie, p.nazwisko, h.data_do, a.data_awansu
FROM pracownicy p
JOIN historia_stanowisk h ON p.id = h.pracownik_id
JOIN awanse a ON p.id = a.pracownik_id
WHERE a.data_awansu < h.data_do;
Odszyfruj system, sprawdź nielogiczne awanse i zgłoś podejrzane ruchy kadrowe!