Azt hiszem, nagyjából sikerült megoldani. Először csináltam egy lekérdezést, ami minden trip-hez megadja a shape_dist_traveled maximumát (a minimumra persze nem kell lekérdezés, mert az mindig 0):
Ezután ezt a két mezőből álló lekérdezést beillesztettem a "nagy" lekérdezésbe. A shape_dist_traveled mezőn lévő feltétel biztosítja, hogy csak a kezdő- és végpontok jönnek ki.
A szépséghiba, hogy az indulási és az érkezési adat ebben még külön rekord, de innen kezdve már egyszerű egymás mellé tenni: két külön lekérdezést kell csinálni, az egyiket 0, a másikat [Maxofshape_dist_traveled] feltétellel, és e kettőt egy újabb lekérdezésben összekapcsolni a közös mezőkke..
Lehet kihagytam a leírásból, de akkor most leírom. Nekem egy Excelben benne van az _összes_ menet ily módon. Az összes busz, villamos, troli, metró, hév, éjszakai, pótló összes menetrendjéből az összes menet. Én egy ilyet szeretnék. (És utána ebből én már Excelben szűrögetnék.)
Igaz, ebben nincs benne a Csepelre érkezés ideje, de a tegnap felvázolt módon az is hozzácsapható. A fenti lekérdezéshez összesen annyit csináltam, hogy leszűkítettem az alaplekérdezésemet a route_id, stop_name, trip_headsign és departure_time mezőkre.
És akkor még bonyolítanám. Az alábbi háromtól független táblázatot szeretnék, amiben akár 8x van benne az adott indulás, ha 8 külön menetrendben szerepel: viszonylat, naptípus, menetrend érvényessége.
Pl.
trip_idr_idservice_idfsz_iddep_timearr_timedep_stoparr_stop A76148449 1590 A76148K1HPHA-0011 02 00:00:00 00:12:00 Szent László utcai lakótelep Csepel, Szent Imre tér A76374637 1590 A76374ASZCsZ-011 04 00:00:00 00:14:00 Szent László utcai lakótelep Csepel, Szent Imre tér A76375217 1590 A76375AVVCsZ-011 01 00:00:00 00:12:00 Szent László utcai lakótelep Csepel, Szent Imre tér A77322554 1590 A77322AHCCsZ-011 01 00:00:00 00:14:00 Szent László utcai lakótelep Csepel, Szent Imre tér A77323710 1590 A77323APPCsZ-011 01 00:00:00 00:14:00 Szent László utcai lakótelep Csepel, Szent Imre tér A79277514 1590 A79277EVVHPCsZ-011 05 00:00:00 00:12:00 Szent László utcai lakótelep Csepel, Szent Imre tér A81831283 1590 A81831AVVCsZ-011 02 00:00:00 00:14:00 Szent László utcai lakótelep Csepel, Szent Imre tér
Ez az indulás ennyiszer szerepel, mert ennyi menetrendben van benne.
Na ezért jobb az Excel, mert ott megvalósítható. Könnyebben. :D
És azért rosszabb, mert a függvényei elkavarodnak. :D
Megpróbálom elméletben levezetni a lehetséges megoldást. Több lekérdezésre lesz szükség, amiket egymásba kell ágyazni.
(1) Alaplekérdezés, ebben legyen benne minden megálló, az elsőtől az utolsóig, a szükséges mezőkkel (beleértve a shape_dist_traveled-et) és szűrésekkel (pl. viszonylat, naptípus, menetrend érvényessége).
(2) Végpont-kereső lekérdezés, ami az (1) lekérdezésből csak a shape_dist_traveled mezőt tartalmazza, az Összesítés sorban a "Max" bejegyzéssel (ez gyakorlatilag egy számot ad eredményül).
(3) Végpont-lekérdezés, ami a fenti kettőt tartalmazza, összekötve (1) -> (2) nyíllal a shape_dist_traveled mező alapján.
Szűrés nélkül kb. így nézne ki a (3) lekérdezés eredménye (a (2) lekérdezés a 2945-öt adta eredményül):
Ezt a lekérdezést klónozva összeállítható külön-külön az indulási és az érkezési lekérdezés. Az indulási úgy, hogy shape_dist_traveled = 0 (a fenti példából így marad a Tulipán utca), az érkezési pedig úgy, hogy MaxOfshape_dist_traveled feltétele Is Not Null (így marad a Határ út). Az így kapott két lekérdezést már csak össze kell kapcsolni egy újabb lekérdezésben az azonos mezőkkel, és elvileg megvagyunk. :-)
Az indulási lekérdezés készíthető a (3) helyett közvetlenül az (1)-ből is, de az érkezési lekérdezéshez a (3) kell, mert előre nem tudjuk, hogy mennyi a maximum shape_dist_traveled (ezt az értéket számítja ki a (2) lekérdezés).
A bökkenő, hogy ezek az egymásba ágyazott lekérdezések kegyetlenül lassan futnak. Persze lehet, hogy van egyszerűbb megoldás is.
Eddig Excelben csináltam különféle bonyolult függvényekkel, erősen időigényesen. Nem is ez volt a baj, hanem hogy valami nagyon elkavarodott a függvényekkel kapcsolatban, és a 253000 sorból van pár hibás (pl. a hsz végén). Ez akasztott most ki annyira, hogy hagyjam a francba az Excelben szenvedést. :D
Isten igazából viszont Accessben nincs türelmem szuszakolni vele (mert sokkal kevésbé értek hozzá, mint az Excel legutolsó, de még hasznos függvényéhez :D), inkább elmondom, milyen adatokat szeretnék, hátha valaki megszán vele egy lekérdezés formájában, amit csak mindig lefuttatok az adott access adatbázison, amit valaki jófejen mindig közzétesz... :P
3 alap adat: trip_id, route_id, service_id
És a különböző machinációkból származó adatok:
fsz_id: ezt gondolom nem kell magyarázni :)
dep_time, arr_time, dep_stop, arr_stop: Ez nálam úgy néz ki, hogy dep_time és dep_stop abból a sorból nyert departure_time és stop_id-hoz tartozó stop_name, ahol az adott trip_id-hoz tartozó shape_dist_traveled értéke pontosan 0. Értelemszerűen az arr_time és az arr_stop pedig abból a sorból nyert departure_time és stop_id-hoz tartozó stop_name, ahol az adott trip_id-hoz tartozó shape_dist_traveled értéke a legnagyobb.
Ha valaki lenne olyan irtóra nagyon kedves... Örök hálám :D
(Ha csak magyarázni akar az illető, akkor vegye figyelembe, hogy Office 2010 ketyeg nálam.)
Köszönöm szépen előre is.
ui. Példasorok
trip_idr_idservice_idfsz_iddep_timearr_timedep_stoparr_stop A77323710 1590 A77323APPCsZ-011 01 00:00:00 00:14:00 Szent László utcai lakótelep Csepel, Szent Imre tér A80655513 1735 A80655AVVPG-0051 48 00:00:00 00:09:00 Újpalota, Nyírpalota út Bosnyák tér A769931104 0150 A76993APPMA-0011 02 17:50:00 18:17:00 Boráros tér H (Közraktár utca) Lehel tér M
és még kb. 253000 egyéb :)
És a hibásra példa:
A7965913 2615 A79658AHCCsZ-031 04 00:20:00 01:00:00 Dél-pesti autóbuszgarázs Csepel, Hollandi út
261E, hajnal 0.20-kor, Dél-Pest és Csepel között. Ugye egyértelmű.. :D
Jól látod. Gondolom a következő frissítésben lesz csak benne. A mostaniban csak egy pár vasárnapi menetrend van az újak közül.
Én meg szenvedek az Access-szel, nemhiába dolgoztam eddig Excelben, de túllépte a hibatűrési határomat a függvényeinek pontatlansága. Az Access-ből meg nem igazán sikerül kinyerni azt, ami kéne nekem :D Na mindegy, majd még szórakozom vele.
Én is köszönöm, de szerintem ez még nem az új menetrendeket tartalmazza, ami március 4.-én lép életbe. Nekem pedig arra lenne szükségem. Mindenesetre alapnak jó lesz. :D
A fájl a táblák importálási specifikációit is tartalmazza, így frissítések esetén egyszerűen újraimportálhatók a táblák. Ezenkívül egy minta-lekérdezést is tettem az adatbázisba, a forgalmi számos mezővel együtt.
A dolog egy-az-egyben a GTFS-ből lett kinyerve, itt-ott belemódosítgattam annyit, hogy pl. a körjárat-szerű útvonallal bíró éjszakaiaknál az amúgy végállomásként meghirdetett, és ott kettébontott meneteket egybeillesztettem (950 Rákospalotai része, 972, 994, 998). Evidensen egy sor egy menet..
Még jó, hogy nem Te vagy az Access motorja, mert működik. :-) Hol látsz benne hibát? Mondjuk ezen a SzövegbenVissza függvényen én is meglepődtem, hogy létezik. (Access 2003 magyar verzió.)
Érdemes mindig egy vadiúj Access adatbázissal indítani, vagy az Eszközök -> Adatbázis-segédeszközök -> Adatbázis tömörítése és helyreállítása funkcióval utólag "gatyába rázni" az adatbázist (ez utóbbit Access 2003-ra írtam, a 2007-esben még nem találtam meg ezt a funkciót). Ilyenkor rákérdez, hogy hova mentse másként, de nyugodtan felülírhatod az eredetit.
Van ugyanis egy olyan sajátossága az Access-nek, hogy ha beleviszel valami új adatot, és utána törlöd / felülírod a régit, ott marad az üres hely. A fenti funkció kinyomja a levegőt az adatbázisból, a HDD töredezettségmentesítéséhez (magyarul defrag :-) ) hasonlóan összevonja az adatokat, néha csodákra képes a fájlméretet illetően.