Diskuze: SQL join na základě pole datumu

Ostatní jazyky SQL SQL a databáze SQL join na základě pole datumu

Avatar
Paul
Člen
Avatar
Paul:

Ahoj, rád bych vás poprosil o radu jak vyřešit následující problém.
Jedná se o databázi prodejny aut. V tabulce A mám auta a sloupec s datumem a časem jejich prodeje. V tabulce B mám ty samé atributy, ale sleduji prodeje aut jiných prodejců.
Jde mi to to tabulky na sebe najoinovat tak, abych u auta, které prodám viděl cenu + datum a čas, za kolik a kdy se uskutečnil poslední předchozí a první následující prodej u konkurence.
To znamená chci vidět že já jsem prodal Škodu Superb 6.9.2015 17:36 a že poslední předcházející prodej u jiného prodejce byl uskutečněn 5.9.2016 13:20 a že první následující prodej Superba byl uskutečněn u jiného prodejce 6.9.2015 19:20.

Poradí někdo prosím? :-)

 
Odpovědět 16. února 9:12
Avatar
Honza
Člen
Avatar
Honza:

Ahoj, klasickým joinem tohle neuděláš ;) Řešení bude určitě více, např. by se to dalo řešit tím, že si dotaz rozdělíš na 3 části:

  1. vytáhni si auto které jsi prodal a ke kterému budeš chtít dotáhnout další informace
  2. z tabulky B si dotáhni stejný typ auta který má nejvyšší datum prodeje ale toto datum je zároveň nižší než tvůj prodej
  3. z tabulky B si dotáhni stejný typ auta který má nejnižší datum prodeje ale toto datum je zároveň vyšší než tvůj prodej

V tuhle chvíli máš k dispozici potřebná data, teď je jen dáš dohromady, třeba podle typu auta. Konkrétní implementace záleží na tom jakou databázi používáš a jak máš strukturovaná data. Můžu se jen zeptat k čemu je tento report dobrý, resp. jak bude používán? Nedává mi totiž moc smysl sledovat předchozí a následující prodej ne globálně, ale ve vztahu k mému prodeji (když si vezmu nějaký svůj rok starý prodej, tak mi to ukáže kdy se prodalo poslední auto před mým prodejem a první po mém prodeji, což mi moc nedává smysl) :)

Nahoru Odpovědět 16. února 11:33
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Paul
Člen
Avatar
Paul:

Díky za odpověď, ale moc jsi mi nepomohl :-)
Je mi jasné, že si nejdřív najdu auto které potřebuju, pak cenu nižší a potom vyšší.
Ale spíš bych potřeboval pomoct se selectem aby dobíhal v nějakém rozumném čase.

 
Nahoru Odpovědět 20. února 10:13
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Paul
Jiří Gracík:

A nějaký select už jsi vymyslel nebo nemáš vůbec ponětí?

Nahoru Odpovědět 20. února 13:16
Creating websites is awesome till you see the result in another browser ...
Avatar
Paul
Člen
Avatar
Paul:

Select mám, ale mám to v práci a je to celkem složitý, dělá se tam cross join a pak se vybírají řádky podle určitých technických sloupců jako je rozdíl mezi datumy apod. Problém je, že ten select běží hodně dlouhou dobu a potřeboval bych to nějakým způsobem zrychlit...

 
Nahoru Odpovědět 20. února 20:32
Avatar
Paul
Člen
Avatar
Odpovídá na Jiří Gracík
Paul:

Select mám, ale mám to v práci a je to celkem složitý, dělá se tam cross join a pak se vybírají řádky podle určitých technických sloupců jako je rozdíl mezi datumy apod. Problém je, že ten select běží hodně dlouhou dobu a potřeboval bych to nějakým způsobem zrychlit...

 
Nahoru Odpovědět 20. února 23:23
Avatar
Odpovídá na Paul
Michal Štěpánek:

Podle mě máš trošku špatně navržené tabulky. Myslím, že bys měl mít tabulku vozidel, tabulku prodejců a pak tabulku prodejů, kde by byl jeden ze sloupců ID prodejce, tím pádem bys vybíral data pouze z této "hlavní" tabulky a k ní bys pouze JOINoval název prodejce a značky aut....

Nahoru Odpovědět 21. února 10:58
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Paul
Jiří Gracík:

Bez toho, aniž bysme věděli, jak ten celý select a struktura tabulek vypadá, ti asi těžko pomůžeme.

Nahoru Odpovědět 21. února 14:12
Creating websites is awesome till you see the result in another browser ...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.