SQL dotaz (SELECT s použitím funkce MAX)   zodpovězená otázka

SQL

Dobrý den, při tvorbě aplikace jsem se zasekl na jedné "drobnosti". Mám tabulku na SQL serveru kde je ID(je to primární klíč který se automaticky vkládá při vložení záznamu), číslo klienta,poznámku a ještě nějáké drobnosti.

Vetšina čísel klientů je v tabulce pouze jednou, ale může se stát že se tam některé objeví 2x i vícekrát a já potřebuji, aby se mi v takovém případě zobrazil pouze nejnovější záznam (to znamená s nejvyšším ID (max ID) ). Nevíte prosím jak formulovat dotaz? Napsal jsem si select

SELECT ID,klient,poznamka

FROM tabulka

WHERE id=(SELECT MAX(ID) FROM predpisy)

To se mi ale samozřejmě zobrazí pouze jeden záznam z celé tabulky který mám nejvyšší ID a to nepotřebuji. Klasické GROUP BY taky nevim jak použít, protože mě zajímá jen nejvyšší ID u shodných čísel (například poznámka může být u každého záznamu toho samého klienta jiná).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ten dotaz jsem vložil s překlepem.

Správně je

SELECT ID,klient,poznamka

FROM tabulka

WHERE id=(SELECT MAX(ID) FROM tabulka)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

SELECT TOP(1) ID,klient,poznamka FROM tabulka ORDER BY ID DESC

Tím vyberete jen první (TOP(1)) řádek, řazeno od největšího ID.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Asi jsem se špatně vyjádřil:) Já potřebuju aby mi to z tabulky vypsalo uplně všechny záznamy s tím, že když je v tabulce několik stejných záznamů aby mi ho to vypsalo pouze jednou a to ten, kde je nejvyšší ID (ale nejvyšší ID pouze v rámci těch například 3 záznamů které mají stejné číslo klienta).

Představte si to tak že ke každému klientovi je v tabulce několik verzí záznamů a já potřebuju vypsat od každého klienta ten nejnovější záznam:)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
SELECT (SELECT MAx(ID) FROM Tabulka WHERE Klient = GroupKlienti.Klient) AS ID, Klient
FROM (select Klient from Tabulka GROUP BY Klient) AS GroupKlienti

Tabulka:

ID klient

1 1

2 1

3 2

4 3

5 4

6 5

7 6

8 1

9 7

10 8

11 9

12 9

13 6

-------------

A tohle je výsledek selektu

8 1

3 2

4 3

5 4

6 5

13 6

9 7

10 8

12 9

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Myslel jsem, že příkaz nekonečných možností SELECT už konečně umím používat, po shlédnutí tohoto SELECTU od Pavla Graňáka, který jsem si otestoval na cvičné tabulce a zjistil, že opravdu funguje, jsem pochopil, že SELECT opravdu stále používat neumím...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den, další způsob je:

select T1.Id, T1.Klient, T1.* from Tabulka T1

outer apply

(

select top 1 Id from Tabulka

where Klient = T1.Klient order by Id desc

) T2

where T2.Id = T1.Id

https://www.mssqltips.com/sqlservertip/1...

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback