SQL Status użytkownika

0

Cześć,
Mam poniższą bazę

Nazwa tabeli - tabela

ID Czas Status
1 2019-01-02 11:15 Z
1 2019-01-02 11:45 N
2 2019-01-02 15:10 Z
2 2019-01-02 15:30 N
2 2019-01-02 17:20 Z

Z - oznacza zalogowany, N - niezalogowany

Chciałbym napisać zapytanie które zwróci mi zalogowanego użytkownika. Ale zalogowanego który się nie wylogował. Czyli patrząc tutaj wyżej dla ID 1 użytkownik się zalogował i wylogował to jego nie chcemy. Dla ID użytkownik się zalogował wylogował i zalogował i tu właśnie chcę otrzymać tą ten status gdzie się zalogował - jest zalogowany cały czas bo się nie wylogował. Czyli wynik

ID Czas Status
2 2019-01-02 17:20 Z
0

Np tak:


SELECT t1.ID, Czas, Status
FROM Tabela t1
INNER JOIN (SELECT ID, MAX(Czas) OstatniLog FROM Tabela Group by ID) t2
ON t1.ID = t2.ID
AND t1.Czas = t2.OstatniLog

WHERE Status = 'Z'

EDIT: dodany alias to ID

2

Skoro na przemian mamy logowanie i wylogowywanie to COUNT(id) jest parzysty dla niezalogowanych i nieparzysty dla zalogowanych. Zatem nie trzeba żadnych joinów i wystarczy:

SELECT `id`, MAX(`time`) from `table` GROUP BY `id` HAVING COUNT(id) % 2 = 1

sqlfiddle: http://sqlfiddle.com/#!9/243040/1

Z tego tez wynika, że kolumna status jest nadmiarowa ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1