Avatar uživatele
anonym

Jak napsat T-SQL dotaz?

Mám DB tabulku se sloupci:
id int primary key,
město varchar,
jméno varchar,
datum datetime

Ve sloupci ID a DATUM jsou vždy unikátní data, MĚSTO a JMÉNO se může opakovat. Chci vypsat poslední datum tak, abych se mi kombinace MĚSTO a JMÉNO vypsala jen jednou, ale abych dostal i data ze sloupců ID a DATUM.

Data v tabulce
1;Praha;Franta;1­.1.2000
2;Praha;Franta;1­.1.2001
3;Brno;Franta;1­.1.2002
4;Brno;Pepa;1­.1.2003
5;Brno;Pepa;1­.1.2004
6;Pardubice;Jar­da;1.1.2005

Výsledkem má být:

2;Praha;Franta;1­.1.2001
3;Brno;Franta;1­.1.2002
5;Brno;Pepa;1­.1.2004
6;Pardubice;Jar­da;1.1.2005

Ve výsledku nebudou tyto řádky, protože existuje novější záznam:
1;Praha;Franta;1­.1.2000
4;Brno;Pepa;1­.1.2003

Díky předem za nakopnutí.

Doplnění: takhle jsem to udělal taky, temporary tabulka, tam nasypu ID, beru záznam po záznamu a když je novější, vložím do další temporary tabulky. Pak záznam v první temp smažu a čtu dál. V SQL nejsem moc pevný v kramflecích, tak mě napadlo, jestli to nejde jednodušeji. Asi nejde :) Dík.

Zajímavá 1Pro koho je otázka zajímavá? Frogman před 3240 dny Sledovat Nahlásit



Odpovědi
Avatar uživatele
Frogman

Nevidím důvod k tomu, aby data (mn. č. slova datum) měla unikátní klíč, ale budiž… Pokud jsi myslel slovem „unikátní“ slovo „neopakující se“ – tj. bez unikátního klíče, tak to pak jo.

Nejdříve bych si udělal ještě tabulky zvlášť na města a zvlášť na jména. Někdy je výhodnější mít více tabulek a propojovat je, než mít vše v jedné – tam se pak hůře hlídají stejné hodnoty, mělo by to sice taky jít (nezkoušel jsem to), jen je to mnohem složitější.

Pak bych napsal dotaz (respektive 2 dotazy) na výběr všech dat a propojení s tabulkou měst a jmen. Cyklus pak proběhne jen všechna města v tabulce měst, do první proměnné se uloží první jméno, které je u prvního města (do dalších proměnných můžeš uložit i ostatní data z tabulky). Když cyklus narazí na další jméno, u kterého je stejné město, porovná se podmínkou if jméno se jménem, které je uloženo v proměnné a v případě, že je jméno stejné, porovnají se ještě podmínkou if data (mn. č. slova datum), v případě, že je datum větší (= pravda) (novější), pak se do proměnných uloží všechny aktuální údaje.
No a takhle to pojede dál.

Snad je to aspoň trochu pochopitelné… :)

PS: Promiň, předtím jsem nebral v úvahu, že jméno se taky nesmí schodovat. :)

Upravil/a: Frogman

0 Nominace Nahlásit


Diskuze k otázce
Avatar uživatele
Frogman

Já v MySQL dělám sotva asi rok, takže jiný postup (zatím) neznám, ale zkus se zeptat tady: http://diskuse­.jakpsatweb.cz/
Je tam spousta hodně chytrých lidí, kteří vždy na něco přijdou. ;)

před 3240 dny Odpovědět Nahlásit
Nový příspěvek
Zajímavé otázky v kategorii Počítače a internet