Autor | Zpráva | ||
---|---|---|---|
tomkralik Profil |
#1 · Zasláno: 16. 1. 2012, 12:34:48
Ahoj lidičky,
prosím poraďte. Mám takovouto tabulku id|user|car|department|datum ----------------------------- 1|815|1|4|2012-01-12 14:03:00 4|796|1|3|2012-01-12 15:30:00 5|816|3|1|2012-01-13 08:29:00 6|817|1|1|2012-01-13 08:45:00 7|489|33|4|2012-01-13 09:55:00 8|816|73|1|2012-01-16 09:46:00 9|817|22|1|2012-01-16 09:47:00 10|818|73|1|2012-01-16 09:58:00 Potřeboval bych získat 1 záznam od každého CAR ale ten nejnovější, tedy např. 10,818,73,1,2012-01-16 09:58:00 6|817|1|1|2012-01-13 08:45:00 9|817|22|1|2012-01-16 09:47:00 ... ... Zkoušel jsem DISTINCT a i GROUP BY, ale nepodařilo se mi dostat správný výsledek. Neobdržel jsem datumově nejnovější záznam. Používám Mooc díky Selecty, které jsem zkoušel. select DISTINCT (caus.car), us.name AS user, de.name AS depart from cars_users AS caus left join users us on us.id=caus.user left join department de on de.id=caus.department left join cars ca on ca.id=caus.car order BY caus.datum select ca.spz,us.name AS user, de.name AS depart from cars_users AS caus left join users us on us.id=caus.user left join department de on de.id=caus.department left join cars ca on ca.id=caus.car GROUP by caus.car order BY caus.datum |
||
Kajman Profil |
#2 · Zasláno: 16. 1. 2012, 13:07:09
Viz. 3. příklad z faq.
|
||
tomkralik Profil |
#3 · Zasláno: 16. 1. 2012, 13:41:53
Kajman:
mooc díky, dostal jsem správný výsledek. Tedy IDčka. Prosím poradil bys ještě jak bych to mohl propojit s tabulkami přes left join, abych dostal místo ID přímo "jméno" díky |
||
Kajman Profil |
#4 · Zasláno: 16. 1. 2012, 13:47:16
inner join cars ca on ca.id=t1.car |
||
tomkralik Profil |
#5 · Zasláno: 16. 1. 2012, 14:08:48 · Upravil/a: tomkralik
Kajman:
tak jsem zkoušel select t1.car, t1.user from cars_users t1, (select t2.car, t2.user, t2.department,max(t2.datum) datum from cars_users t2 group by t2.car) t3 inner join cars ca on ca.id=t1.car where t1.car = t3.car and t1.datum = t3.datum; tak jsem se s tím popral a i doufám úspěšně. pro úplnost přikládám funkční query základní query select t5.*, us.name AS uzivatel from (select t1.id, t1.car, t1.user, t1.department, t1.datum from cars_users t1, (select t2.car, max(t2.datum) datum from cars_users t2 group by t2.car) t3 where t1.car = t3.car and t1.datum = t3.datum) t5 left join users us on us.id=t5.user finální query select t5.id, t5.car,ca.name As auto, t5.user,us.name as uzivatel,t5.department,de.name as depart,t5.datum from (select t1.id, t1.car, t1.user, t1.department, t1.datum from cars_users t1, (select t2.car, max(t2.datum) datum from cars_users t2 group by t2.car) t3 where t1.car = t3.car and t1.datum = t3.datum) t5 left join cars ca on ca.id=t5.car left join users us on us.id=t5.user left join department de on de.id=t5.department doufám, že to pomůže někomu dalšímu. mooc díky za nakopnutí ... |
||
Kajman Profil |
#6 · Zasláno: 16. 1. 2012, 15:22:58
tomkralik:
To bylo prioritami spojování, kdy cross join zapsaný čárkou se bude dělat až po inner joinu. Stačilo přehodit pořadí t1 a t3 a nemuselo by to být v dalším poddotaze. Ale z hlediska rychlosti budou nejspíše oba zápisy totožné. |
||
Časová prodleva: 28 dní
|
|||
tomkralik Profil |
#7 · Zasláno: 13. 2. 2012, 12:38:31
Kajman:
Ahoj, prosím poradil bys mi ještě jak upravit výše uvedený finální query tak aby ve výsledku byly zahrnuty i car (ca.spz), které nemaji záznam v cars_users z níž se čerpá nyní? Nevím zda je to vůbec možné. Mooc díky |
||
Kajman Profil |
#8 · Zasláno: 13. 2. 2012, 13:00:13
right join cars ca on ca.id=t5.car |
||
tomkralik Profil |
#9 · Zasláno: 13. 2. 2012, 13:38:49
Kajman:
jak jednoduché když to člověk zná ... super, mooooc díky |
||
Časová prodleva: 11 let
|
0