Zapytanie mysql. Jednej tabla i uwzględnienie kolejności ID.

0

Witam.

ID     |      Dat               |  User   |     Tresc
-------|------------------------|---------|------------------------  
1096   |    2018-01-07 12:11:33 | Janusz  | Otwarcie programu F000
1095   |    2018-01-07 12:10:54 | Janusz  | Koniec pracy F000
1094   |    2018-01-07 12:10:51 | Janusz  | Otwarcie programu F000
1093   |    2018-01-07 12:04:03 | Tomek   | Koniec pracy F000
1092   |    2018-01-07 12:03:24 | Tomek   | Otwarcie programu F000

Jak z tej tabeli wyłapać czy dany User korzysta z programu czy nie.

Pozdrawiam
Janusz

0

posortować wg daty, wybrać usera i sprawdzić czy ostatni wpis to Otwarcie programu

0

A jak będzie kilu działo na raz to ich będzie ciężko znaleźć.

0

https://www.google.pl/search?q=podstawy+SQL i zacznij się uczyć zamiast pisać debilne posty

0

nie wiem jaka baza, w Firebird oraz Interbase tak by to wyglądało :

select 
  first 1 tresc 
from 
  table
where 
  user='Janusz'
order by dat,id desc

Edit....
Gdybyś chciał to zrobić porządnie to należało by rejestrować początek i koniec sesji użytkownika w tabeli np. takiej

ID - int (PK)
userID - int 
startSession - timestamp
stopSession - timestamp
0
CREATE TABLE `rejestr` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `dat` datetime DEFAULT NULL,
  `log` varchar(20) DEFAULT NULL,
  `tresc` varchar(150) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=MyISAM AUTO_INCREMENT=1098 DEFAULT CHARSET=utf8;

SELECT FIRST 1 tresc 
FROM rejestr 
WHERE log='Janusz' ORDER BY dat, id DESC


screenshot-20180107155807.png

0

poczytaj jak w MySql zawęzić wynik zapytania do pierwszego wiersza
chyba limit 1

0

@grzegorz_so Masz rację świetny pomysł dzięki za podpowiedź. Z poprzedniego rozwiązania zrezygnuję. Temat nie aktualny.

Dziękuje i pozdrawiam.
Janusz

0

Dwóch timestamp nie da się wsadzić do jednej tabeli.

0
dasej napisał(a):

Dwóch timestamp nie da się wsadzić do jednej tabeli.

Bzdura.
http://shankargopal.blogspot.in/2013/03/mysql-566-timestamp-columns-and-default.html

A pisali, żebyś czytał manual, to czytaj:
https://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html

0

Dwóch timestamp nie da się wsadzić do jednej tabeli.

Da się

0

Teraz już wiem ale nie wiem i na razie nie wiem jak mam to wykorzystać. Muszę poczytać.

0

Z głowy:

select distinct(L1.User) from log L1
left join log L2 on L1.User = L2.User
where L1.Tresc = 'Otwarcie programu F000'
and L2.Tresc = 'Koniec pracy F000'
and L2.Dat > L1.Dat
and L2.Dat is null

Czyli szukamy takiego wpisu 'Otwarcie', że nie ma wpisu późniejszego wpisu 'Zamknięcie'.

0

Sprawdziłem. Odpowiedź NULL

Tak zadziałało. wielkie dzięki.


select distinct(L1.User) from log L1
left join log L2 on L1.User = L2.User
where L1.Tresc = 'Otwarcie programu F000' and 
       (  L2.Tresc = 'Koniec pracy F000' and L2.Dat > L1.Dat or L2.Dat is null )

Jest jeszcze mały drobiazg nie pokazuje osób które otworzyły program i w dane chwili korzystają.

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