Sortowanie danych SQL

0

Dzień Dobry,

Mam pewien problem. Posiadam tabele z danymi dotyczącymi wyników testów BHP. Biorąc pod uwagę fakt, ze testy wykonywane są cyklicznie chciałbym aby zapytanie wyświetliło mi dane ostatnich wyników dla danego pracownika. Na tą chwilę udało mi się tylko wyświetlić wszystkie wyniki testów z podziałem na BHP.

*SELECT PRA.imie, PRA.nazwisko, TST.name, TTP.finish_time, TTP.result, TST.id FROM [TESTS].[dbo].[trg_test_personel] TTP
JOIN [TESTS].[dbo].[lot_personel] PER on TTP.personel_id=PER.ID
JOIN [TESTS].[dbo].[str_pracownik] PRA on PER.id_pracownik=PRA.ID
JOIN [TESTS].[dbo].[trg_test] TST on TTP.test_id=TST.ID
where TST.name LIKE '%BHP%' or TST.id =167 and PRA.blokada=0
order by TTP.finish_time desc
*
Dane są pobierane z kilku tabel za pomocą łączenia JOIN.
Czy w jakiś prosty sposób można wskazać w zapytaniu aby uzyskać ostatni wynik testu bhp dla danego pracownika ?
Chcę zredukować wszystkie stare wyniki.

Dziękuję za podpowiedzi i pozdrawiam,

0

SELECT TOP 1 (...)

0

No tak ale to zapytanie zwróci mi jeden rekord, a ja potrzebuje wyniki ostatnich wykonanych testów przez pracowników.

0
SELECT PRA.imie, PRA.nazwisko, x.name, x.finish_time, x.result, x.id FROM [TESTS].[dbo].[str_pracownik] PRA 
cross apply (SELECT top 1 TST.name, TTP.finish_time, TTP.result, TST.id FROM [TESTS].[dbo].[trg_test_personel] TTP
JOIN [TESTS].[dbo].[lot_personel] PER on TTP.personel_id=PER.ID
JOIN [TESTS].[dbo].[trg_test] TST on TTP.test_id=TST.ID
where TST.name LIKE '%BHP%' or TST.id =167 and PER.id_pracownik=PRA.id
order by TTP.finish_time desc) x
where PRA.blokada=0
order by PRA.nazwisko, PRA.imie
3

Można użyć ROW_NUMBER

SELECT
    *
FROM (
	SELECT 
		ROW_NUMBER() over (partition by PRA.ID order by  TTP.finish_time desc) R
		,PRA.imie
		, PRA.nazwisko
		, TST.name
		, TTP.finish_time
		, TTP.result
		, TST.id 
	FROM 
		[TESTS].[dbo].[trg_test_personel] TTP
		JOIN [TESTS].[dbo].[lot_personel] PER on TTP.personel_id=PER.ID
		JOIN [TESTS].[dbo].[str_pracownik] PRA on PER.id_pracownik=PRA.ID
		JOIN [TESTS].[dbo].[trg_test] TST on TTP.test_id=TST.ID
	where 
		TST.name LIKE '%BHP%' 
		or TST.id =167 
		and PRA.blokada=0
	) dt
WHERE
    R=1
0

@Paweł Dmitruk: Ten skrypcik spowodował, że otrzymałem faktycznie pracowników posortowanych bez powtórzeń ale czas wykonania testu jest taki sam dla wszystkich ;(

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