Unikalne rekordy względem konkretnych pól

0

Witam,
Chciałbym uzyskać listę unikalnych rekordów z tabeli, ale wg konkretnych pól. Zapytanie wybiera z tabeli około 30 pól. Może podam przykład.
Dane wybrane z bazy zapytaniem:

PRE_Pesel	PRE_Nazwisko	PRE_Imie1	PRE_PraId	PRE_ETADataZawarcia	PRE_ETARodzajUmowy	PRE_DataOd	PRE_DataDo	PRE_UBZTyuId	PRE_KodZawoduSymbol	PRE_ZatrudnionyDo	PRE_KodWygasniecia	PRE_KodPodstPrawRozw	PRE_PodstPrawRozw	RozwiązanieUm	PRE_StronaInicjujaca	PRE_ETAStosunekPracy	PRE_ETAStawka	PRE_ETAStawkaGodz	PRE_ETARozwiazUmowy	PRE_ETAEtatL	PRE_ETAMiejsce	PRE_ETAEtatM	PRE_ETADataRozpocz	PRE_ZatrudnionyOd	PRE_HDKRodzajMiejsc	PRE_RodzajDokumentu	PRE_ETADkmIdStanowisko	PRE_DkmIdKodZawodu	PRE_ETADkmIdWypowPowod	PRE_DkmIdPracodawca	PRE_TS_Zal	PRE_OpeModId	PRE_StaModId	PRE_TS_Mod	PRE_HDKGUSSymbolWykszt	PRE_HDKGUSSymbolSystemuCzP
75061292372	Babińska	Joanna	1	2001-03-06 00:00:00.000	na czas nieokreślony	1900-01-01 00:00:00.000	2019-10-31 00:00:00.000	110		2999-12-31 00:00:00.000				NULL	0	0	1300.00	0	0	1		2	2001-03-06 00:00:00.000	2001-03-06 00:00:00.000	0	0	51	NULL	NULL	NULL	2022-06-15 12:30:02.000	1	32	2022-06-15 15:24:54.000	0	10
75061292372	Babińska	Joanna	1	2001-03-06 00:00:00.000	na czas nieokreślony	2019-11-01 00:00:00.000	2021-12-31 00:00:00.000	110		2999-12-31 00:00:00.000				NULL	0	0	1300.00	0	0	1		2	2001-03-06 00:00:00.000	2001-03-06 00:00:00.000	0	0	51	NULL	NULL	NULL	2022-06-15 15:24:54.000	1	32	2022-06-15 15:25:10.000	0	10
75061292372	Babińska	Joanna	1	2001-03-06 00:00:00.000	na czas nieokreślony	2022-01-01 00:00:00.000	2022-12-31 00:00:00.000	110		2999-12-31 00:00:00.000				NULL	0	0	1505.00	0	0	1		2	2001-03-06 00:00:00.000	2001-03-06 00:00:00.000	0	0	51	NULL	NULL	NULL	2022-06-15 15:25:10.000	1	33	2023-02-13 14:32:16.000	0	10
75061292372	Babińska	Joanna	1	2001-03-06 00:00:00.000	na czas nieokreślony	2023-01-01 00:00:00.000	2999-12-31 00:00:00.000	110		2999-12-31 00:00:00.000				NULL	0	0	1745.00	0	0	1		2	2001-03-06 00:00:00.000	2001-03-06 00:00:00.000	0	0	51	NULL	NULL	NULL	2023-02-13 14:32:16.000	1	33	2023-02-13 14:32:16.000	0	10

I teraz ja bym chciał uzyskać unikatowe rekordy względem pól: PRE_ETARodzajUmowy, PRE_ZatrudnionyDo, PRE_ETAStawka, PRE_ETADkmIdStanowisko, oraz PRE_ETAEtatL/PRE_ETAEtatM

Czyli z tych 4 rekordów, powinienem otrzymać 3 rekordy, ponieważ unikatowe wartości są tylko w polu PRE_ETAStawka. Podpowie ktoś, jak to ugryźć?

0

Zgrupuj po PRE_ETARodzajUmowy, PRE_ZatrudnionyDo, PRE_ETAStawka, PRE_ETADkmIdStanowisko, oraz PRE_ETAEtatL/PRE_ETAEtatM, a pozostałe pola które chcesz mieć w SELECT wyciągaj przez jakąś funkcję agregującą, choćby min().

Coś w rodzaju:

SELECT a, b, c, min(d), min(e)
FROM tbl
GROUP BY a, b, c
0
Saalin napisał(a):

Zgrupuj po PRE_ETARodzajUmowy, PRE_ZatrudnionyDo, PRE_ETAStawka, PRE_ETADkmIdStanowisko, oraz PRE_ETAEtatL/PRE_ETAEtatM, a pozostałe pola które chcesz mieć w SELECT wyciągaj przez jakąś funkcję agregującą, choćby min().

Coś w rodzaju:

SELECT a, b, c, min(d), min(e)
FROM tbl
GROUP BY a, b, c

Niestety nie działa.

0
Buster napisał(a):
Saalin napisał(a):

Zgrupuj po PRE_ETARodzajUmowy, PRE_ZatrudnionyDo, PRE_ETAStawka, PRE_ETADkmIdStanowisko, oraz PRE_ETAEtatL/PRE_ETAEtatM, a pozostałe pola które chcesz mieć w SELECT wyciągaj przez jakąś funkcję agregującą, choćby min().

Coś w rodzaju:

SELECT a, b, c, min(d), min(e)
FROM tbl
GROUP BY a, b, c

Niestety nie działa.

A co dokładnie nie działa ?

0

Pokaż zapytanie i błąd, jak niewierny Tomasz - nie uwierzę, póki nie zobaczę.

0
Saalin napisał(a):

Pokaż zapytanie i błąd, jak niewierny Tomasz - nie uwierzę, póki nie zobaczę.

Błędu nie ma, ale nie wyciąga tego, co chcę. Wyciąga wszystkie rekordy.

0

Oki. Wklejam zapytanie.


SELECT MIN(PRE_Pesel) PRE_Pesel
	,MIN(PRE_Nazwisko) PRE_Nazwisko
	,MIN(PRE_Imie1) PRE_Imie1
	,MIN(PRE_PraId) PRE_PraId
	,MIN(PRE_ETADataZawarcia) PRE_ETADataZawarcia
	,PRE_ETARodzajUmowy
	,MIN(PRE_DataOd) PRE_DataOd
	,MIN(PRE_DataDo) PRE_DataDo
	,MIN(PRE_UBZTyuId) PRE_UBZTyuId
	,MIN(PRE_KodZawoduSymbol) PRE_KodZawoduSymbol
	,PRE_ZatrudnionyDo
	,MIN(PRE_KodWygasniecia) PRE_KodWygasniecia
	,MIN(PRE_KodPodstPrawRozw) PRE_KodPodstPrawRozw
	,MIN(PRE_PodstPrawRozw) PRE_PodstPrawRozw,
	(SELECT TOP 1 DKM_Nazwa FROM cdn.DaneKadMod WHERE DKM_DkmId = MIN(PRE_ETADkmIdWypowPowod) AND DKM_Rodzaj = 3 order by MIN(PRE_DataOd) desc) RozwiązanieUm
	,MIN(PRE_StronaInicjujaca) PRE_StronaInicjujaca
	,MIN(PRE_ETAStosunekPracy) PRE_ETAStosunekPracy
	,PRE_ETAStawka
	,MIN(PRE_ETAStawkaGodz) PRE_ETAStawkaGodz
	,MIN(PRE_ETARozwiazUmowy) PRE_ETARozwiazUmowy
	,CONVERT(NVARCHAR(2), PRE_ETAEtatL) + '/' + CONVERT(NVARCHAR(2), PRE_ETAEtatM) PRE_ETAEtat
	,MIN(PRE_ETAMiejsce) PRE_ETAMiejsce
	,MIN(PRE_ETADataRozpocz) PRE_ETADataRozpocz
	,MIN(PRE_ZatrudnionyOd) PRE_ZatrudnionyOd
	,MIN(PRE_HDKRodzajMiejsc) PRE_HDKRodzajMiejsc
	,MIN(PRE_RodzajDokumentu) PRE_RodzajDokumentu
	,PRE_ETADkmIdStanowisko
	,MIN(PRE_DkmIdKodZawodu) PRE_DkmIdKodZawodu
	,MIN(PRE_ETADkmIdWypowPowod) PRE_ETADkmIdWypowPowod
	,MIN(PRE_DkmIdPracodawca) PRE_DkmIdPracodawca
	,MIN(PRE_TS_Zal) PRE_TS_Zal
	,MIN(PRE_OpeModId) PRE_OpeModId
	,MIN(PRE_StaModId) PRE_StaModId
	,MIN(PRE_TS_Mod) PRE_TS_Mod
	,MIN(PRE_HDKGUSSymbolWykszt) PRE_HDKGUSSymbolWykszt
	,MIN(PRE_HDKGUSSymbolSystemuCzP) PRE_HDKGUSSymbolSystemuCzP
FROM CDN.PracEtaty 
GROUP BY PRE_ETARodzajUmowy, PRE_ZatrudnionyDo, PRE_ETAStawka, PRE_ETADkmIdStanowisko, PRE_PraId, PRE_DataOd, PRE_ETAEtatL, PRE_ETAEtatM
order by pre_praid, pre_dataod


I jak były 4 rekordy, tak są 4 rekordy. A chciałem, żeby były 3. Heh.

0

grupuj dokładnie po tym, co 'selektujesz' -> mam na myśli CONVERT(NVARCHAR(2), PRE_ETAEtatL) + '/' + CONVERT(NVARCHAR(2), PRE_ETAEtatM), to dorzuć do grupowania

0
wemibo napisał(a):

grupuj dokładnie po tym, co 'selektujesz' -> mam na myśli CONVERT(NVARCHAR(2), PRE_ETAEtatL) + '/' + CONVERT(NVARCHAR(2), PRE_ETAEtatM), to dorzuć do grupowania

Kurde. Już wiem. Mam sortowanie po polu PRE_DataOd i musiałem je wtedy wrzucić do grupowania. A to rozwalało mi cały system. Czy da się sortować po tym polu, ale jednocześnie nie grupować po nim?

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