Hirdetés

2024. május 1., szerda

Gyorskeresés

Útvonal

Fórumok  »  Szoftverfejlesztés  »  SQL kérdések (kiemelt téma)

Hozzászólások

(#1801) Peter Kiss válasza dellfanboy (#1795) üzenetére


Peter Kiss
senior tag
LOGOUT blog

Amit te keresel, azt úgy hívják, VIEW. Ha azokkal a táblákkal kellene dolgoznod, kérj egy VIEW-t. Ekkor a VIEW-hoz adnak hozzá, nem a TABLE-hoz SELECT permission-nel.

(#1802) sztanozs válasza Peter Kiss (#1801) üzenetére


sztanozs
veterán

View vagy a valódi tábla, egyre megy - ha nem kapott a táblára select jogot (feltételezem úgy, hogy kért), akkor nem valószínű, hogy fognak neki csinálni egy view-t...

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#1803) drkbl válasza sztanozs (#1799) üzenetére


drkbl
őstag

(#1804) Speeedfire


Speeedfire
nagyúr

Adott 2 tábla egyikben forum leírások vannak, a másikban pedig a fórum hozzászólások.
forum:
----------
id | title

comment:
---------------
forum_id | comment | create_time

Olyan lekérdezés lenne a célom ami kilistázza az összeset a fórum táblából és az ordernek a comment tábla create time értéke lenne.

select *
from forum t
left join comment s
on t.id=s.forum_id
order by s.create_time desc

Ennél a lekérdezésnél jó is lehetne, csak a commentek miatt többször is listázza ugyan azt a fórum leírást.
Ha rakok rá egy group by-t, akkor pedig nem jó az order.
Valakinek valami tippje? Csináljak egy subselect-et?
Vagy lehet join-nal is, csak épp nem így. :D

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1805) Apollo17hu válasza Speeedfire (#1804) üzenetére


Apollo17hu
őstag

Úgy akarod, hogy a lekérdezésed eredménye az legyen, hogy:
minden fórumazonosító (id) egyszer, ezekhez pedig a legutolsó (=legfrissebb) komment (comment), és a hozzá tartozó create_time érték? Ha igen, akkor kell bele a comment mező is vagy elég csak az időpecsét?

(#1806) Speeedfire válasza Apollo17hu (#1805) üzenetére


Speeedfire
nagyúr

Csak az időbélyeg érdekel, maga a comment nem.
pl
select t.*, s.create_time as order
from forum t
left join comment s
on t.id=s.forum_id
order by order desc

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1807) Peter Kiss válasza Speeedfire (#1804) üzenetére


Peter Kiss
senior tag
LOGOUT blog

select *
from forum t
left join (select forum_id, MAX(create_time) as lastTime group by forum_id) as s
on t.id=s.forum_id
order by s.create_time desc

[ Szerkesztve ]

(#1808) Speeedfire válasza Peter Kiss (#1807) üzenetére


Speeedfire
nagyúr

Köszi! :R

Sejtettem, hogy subselect nélkül nem fog menni. :(

[ Szerkesztve ]

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1809) Peter Kiss válasza Speeedfire (#1808) üzenetére


Peter Kiss
senior tag
LOGOUT blog

Fentiból hiányzik egy from comment, mindegy.

Sub query nélkül is lehet:
select t.id, t.name, MAX(s.create_time) as order
from forum t
left join comment s on t.id=s.forum_id
group by t.id, t.name
order by MAX(s.create_time) desc

(#1810) Speeedfire válasza Peter Kiss (#1809) üzenetére


Speeedfire
nagyúr

Valóban, így is megy. :R

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1811) Speeedfire


Speeedfire
nagyúr

Adott egy tábla:

id | lang | mess
1 | hu | valami
1 | en | envalami
2 | hu | megvalami
2 | en | enmegvalami
3 | hu | ot

Le lehet ezt kérdezni úgy, hogy ilyen formában kapjam vissza?

id | hu | en |
1 | valami | envalami
2 | megvalami | enmegvalami
3 | ot | -

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1812) Ispy válasza Speeedfire (#1811) üzenetére


Ispy
veterán

Ha MS SQL, akkor igen.

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#1813) Speeedfire válasza Ispy (#1812) üzenetére


Speeedfire
nagyúr

Oracle.
De ez így valóban jó. :K

select * from (select * from message) message
pivot
(
max(translation)
for(language) in ('hu', 'en', 'de')
) pivotmess;

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1814) Ispy válasza Speeedfire (#1813) üzenetére


Ispy
veterán

select * from (select * from message) message

helyett elég ez is:

select * from message

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#1815) Speeedfire válasza Ispy (#1814) üzenetére


Speeedfire
nagyúr

Köszi!

Egyedül a mező nevek nem a legjobbak így, mert így jön le a mező név: 'hu', 'en', 'de'. Nem kellene az aposztróf nekem.

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1816) Ispy válasza Speeedfire (#1815) üzenetére


Ispy
veterán

Nem is kell oda, vedd ki belőle :K

select * from message
pivot
(
max(translation)
for(language) in (hu, en, de)
) pivotmess;

[ Szerkesztve ]

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#1817) Apollo17hu válasza Speeedfire (#1811) üzenetére


Apollo17hu
őstag

vagy:

SELECT id
,MIN(CASE
WHEN lang = 'hu' THEN
mess
END) AS "hu"
,MIN(CASE
WHEN lang = 'en' THEN
mess
END) AS "en"
FROM tabla
GROUP BY id

(#1818) Speeedfire válasza Ispy (#1816) üzenetére


Speeedfire
nagyúr

Oracle alatt kell sajnos, különben constansnak gondolja.
Viszont az as működik ott is. Így már faja. :)

select * from message
pivot
(
max(translation)
for(language) in ('hu' as hu, 'en' as en, 'de' as de)
) pivotmess;


Apollo17hu: Ez sem rossz, de a fenti egyszerűbbnek tűnik.

[ Szerkesztve ]

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1819) Apollo17hu válasza Speeedfire (#1818) üzenetére


Apollo17hu
őstag

Igen, ugyanazt az eredményt hozza a kettő, de azért írtam be, mert a pivotot talán nehezebb "testreszabni" nagyobb mátrixoknál.

(#1820) Speeedfire válasza Apollo17hu (#1819) üzenetére


Speeedfire
nagyúr

Sok rekordnál én sem tudom melyik lenne jobb performanciában. Egyelőre marad a pivot, ha lassú lesz idővel akkor megnézem a többi eshetőséget is. :)

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1821) bambano


bambano
titán

kellene gyors segítség: postgresql-ben van valami eval vagy exec szerű függvény? valami ilyen kellene, hogy:

select * from eval (select sql_command from table where id=1);

egy halom grafikont kellene legyártanom, és utálnám, ha kézzel kellene. tia.

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#1822) Speeedfire válasza bambano (#1821) üzenetére


Speeedfire
nagyúr

Sima subselect nem megy?

select a.* from (select sql_command from table where id=1) a;

[ Szerkesztve ]

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1823) bambano válasza Speeedfire (#1822) üzenetére


bambano
titán

én úgy látom, hogy itt a from query-ben megadott select eredményét hozza ki, nem pedig a megadott select lefuttatásával kapott eredményt.

de lehet, hogy elgépeltem valamit, nem tudom.

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#1824) Speeedfire válasza bambano (#1823) üzenetére


Speeedfire
nagyúr

Esetleg? [link]
select * from execute(select sql_command from table where id=1)

Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com

(#1825) bambano válasza Speeedfire (#1824) üzenetére


bambano
titán

execute vagy pl/pgsql scriptben van, vagy prepared statementben. Ez utóbbi esetben nem így kell meghívni, hanem a nevével és a paramétereivel.

a pl/pgsql scripttel azért nem bírtam még zöldágra vergődni, mert nem lehet tudni előre, hogy milyen formátumban adja vissza a táblát az exec, de azt előre bele kellene drótozni a scriptbe. pech.

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#1826) Jester01 válasza bambano (#1821) üzenetére


Jester01
veterán

Ha máshogy nem akkor simán átkéred kliensoldalra majd visszaküldöd, nem nagy kaland.

Jester

(#1827) martonx válasza bambano (#1821) üzenetére


martonx
veterán

Erre való a ciklus. Mondjuk while

Én kérek elnézést!

(#1828) bambano válasza martonx (#1827) üzenetére


bambano
titán

kifejtenéd bővebben?

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#1829) martonx válasza bambano (#1828) üzenetére


martonx
veterán

Tessék bővebben

39.6.4-es szekciót nézd. Fogod a selectedet, egy FOR ciklussal végigjárod az eredményét, és mindegyikre meghívod azt amit csak akarsz.

Remélem elég bő voltam.

Én kérek elnézést!

(#1830) bambano válasza martonx (#1829) üzenetére


bambano
titán

Három dolgot nem értek a válaszodban:
- függvényt kerestem volna eredetileg, ez meg tárolt procedúrában egy vezérlési szerkezet
- attól, hogy for-ral dolgozom fel a query eredményét, hogyan fog változni a tárolt procedúra által visszaadott adatok típusa?
- miért kellene for-t használnom arra, amire van beépített kész utasítás?

tartok tőle, nem ugyanazt értettük a kérdésem alatt.

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#1831) martonx válasza bambano (#1830) üzenetére


martonx
veterán

Lehet, hogy félreértettelek. Úgy értettem, hogy egy query eredményeként kigenerálsz egy rakás SQL query-t, és ezeket szeretnéd egymás után futtatni programozottan.

Hja, normálisabb SQL nyelvekben ehhez nem kell tárolt eljárás, PostgreSql-ben valóban kell (bár mintha 9.1 / 9.2 újdonsága lenne, hogy immár tárolt eljáráson kívül is lehet benne magasabb szintű nyelvi elemeket is használni)
Kettes kérdésedet nem tudom értelmezni, lehet azért mert még mindig nem értem, hogy mit is szeretnél?
Hármas kérdésedre sem tudok válaszolni. Ha van, akkor használd azt. Öröm - boldogság. Ha nincs, akkor örülök, hogy segíthettem a for-os ötletemmel.

Azért végezetül megpróbálnád összefoglalni, hogy mit is szerettél volna, és végül mi lett a legegyszerűbb megoldás?

Én kérek elnézést!

(#1832) bambano válasza martonx (#1831) üzenetére


bambano
titán

a probléma a következő: van egy halom mérési eredményem. ebből csinálni kell egy halom grafikont. a grafikon legyártása gyakorlatilag ugyanolyan lépésekből áll, kivéve, hogy az adatsort, amiből lesz, más-más query-k adják. ezért gondoltam arra, hogy a különbözőséget jelentő queryket belerakom egy táblába, a többihez írok egy darab scriptet, aminek egy paramétere, hogy hanyadik query-s grafikont csinálja meg és azt futtatom.

ehhez kellene egy olyan, amit más programozási nyelvekben evalnak szoktak hívni, hogy összerakom valahogy egy stringbe a queryt és azt ugyanúgy feldolgoztatom, mintha simán beírt query lenne.

"Úgy értettem, hogy egy query eredményeként kigenerálsz egy rakás SQL query-t, és ezeket szeretnéd egymás után futtatni programozottan.": mindig egy query lesz az eredmény, azt kell futtatni.

Erre elvileg (postgrestől elvonatkoztatva) két módszer létezhet:
- van készen eval függvény
- tárolt eljárást kell rá írni.

A postgresben nincs eval függvény, meg más sem, amire hunyorítva nézve eval függvény lehetne, ezért ez az út járhatatlan.

A postgresnek a tárolt eljárási környezetében van olyan, hogy visszatérési eredményként egy query által generált táblát adok vissza, de ezzel az a probléma, hogy a tárolt eljárás definíciós részében meg kell adni a tábla formátumát, hogy milyen rekordtípust fog visszaadni, az pedig nem egyforma. Így nem tudom a tárolt eljárásban a return query exec-et használni.

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#1833) martonx


martonx
veterán

"mindig egy query lesz az eredmény, azt kell futtatni.
Erre elvileg (postgrestől elvonatkoztatva) két módszer létezhet:
- van készen eval függvény
- tárolt eljárást kell rá írni."

Akkor csak jól értettem. Postgrestől esetedben éppen hogy nem lehet elvonatkoztatni, mert pl. MySQL-lel, vagy MSSQL-el (de gondolom Oracle-lel is, bár azzal nincs sok tapasztalatom) simán futtathatnád tárolt eljárás nélkül is a kapott query-det.
Az eval-t javascriptből ismerem, tudtommal SQL-ekben ilyen nyelvi elem nincs (hacsak nem oracle-ben), az hogy egy programnyelvben mit hogy oldasz meg, teljesen irreleváns SQL-ben fejlesztéskor.

A problémádat még mindig nem értem teljesen, de végiglépdelni egy query recordjain, amelyekben szintén query-k vannak legenerálva, és ezeket a queryket egymás után futtatni, továbbra is azt mondom, hogy a FOR egy megfelelő megoldás lehet.

Én kérek elnézést!

(#1834) Ispy válasza martonx (#1833) üzenetére


Ispy
veterán

Még mindig nem érted:
olyan utasítást keres, amivel egy táblában található utasítást tud futattni kódból, mssqlben ilyen az sp_executesql függvény, vagy visual basicben az eval függvény. Tehát, ha végiglépked egy forral, akkor a for belsejében kell egy függvény, ami a ciklus által visszaadott értéket tudja nativ kódként értelmezni.

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#1835) bambano válasza martonx (#1833) üzenetére


bambano
titán

de nem akarom a query recordjain végiglépkedni, mert egy query-m van.
van egy táblám, van benne n darab query. ezekből a querykből mindig pontosan egyre van szükségem, sem többre, sem kevesebbre. pontosan egy elemű for ciklust futtatni nem látszik hasznosnak. majd egy másik, későbbi időpontban egy másik queryre van szükségem, de akkor is csak pontosan egyre.

(#1834) Ispy :R

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#1836) bpx válasza Ispy (#1834) üzenetére


bpx
őstag

igen, es ez az, ami nincs sajnos
ami van, ahhoz kell korites, es tudni kell, mit fog visszaadni a query
ugyanez van Oracle-ben is, EXECUTE IMMEDIATE-tel kb. akarmit vegre lehet hajtani, de csak PL/SQL-ben, es ha van kimenete, ahhoz bizony programozni kell, hogy lassak belole valamit
ha meg elore nem ismert a kimenet strukturaja, hat hagyjuk... :)
az sp_executesql ahogy nezem, az is ugyanilyen

nem tudom mekkora az adathalmaz, es hogy kritikus folyamat, vagy eleg az "egyszer fusson le es kesz", de erre a legegyszerubb modszer szerintem mindenfele eval kinlodas nelkul, hogy nem az adatbazisban rakom ossze a query-t dinamikusan es futtatok mindent, hanem a kliens (pl. egy shell script) elkeri a futtatando query-ket es szepen beadagolja

pl. van egy script, ami lekeri a queryket, es futtatja oket psql-el, a kimenetet meg kitolja mondjuk CSV fajlba (vagy amibe kell)
vegen meg a fajlokra mehet a grafikon generator

nem tul szep, de legalabb egyszeru

(#1837) bambano válasza bpx (#1836) üzenetére


bambano
titán

"a kliens (pl. egy shell script) elkeri a futtatando query-ket es szepen beadagolja": ez egyre inkább igaznak tűnik, csak eddig volt már rá több példa is, hogy egy-két okos embernek volt jobb megoldása, mint amit én elsőre találtam, ebben bíztam most is.

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#1838) retes


retes
aktív tag

Sziasztok!

Olyan segítségre lenne szükségem, hogy adott egy sima Access, amiben egy táblában egy adott oszlopra szeretnék úgy lekérdezést készíteni, hogy mikor lefuttatom, akkor kérje be a kezdő és a vég értéket. Vagyis tetszőleges tartományt kérjek le. Szóval ha az oszlop 1,2,3,4,5,6,7,8 akkor meg tudjam adni, hogy nekem a 3 és a 6 köztieket dobja ki.
Tudna valaki segíteni, hogy ezt hogyan lehet elérni Accessben.
Előre is nagyon köszönöm a segítséget!

A tudás mindenkié!!!

(#1839) martonx válasza retes (#1838) üzenetére


martonx
veterán

Maga az SQL lekérdezésed megvan legalább? Ha igen, akkor mi a kérdés?
Ha az sincs, akkor előbb egy minimális Access tudást illene magadra szedni, mielőtt kérdezel.

Én kérek elnézést!

(#1840) retes válasza martonx (#1839) üzenetére


retes
aktív tag

Azt próbálom, csak adott közben egy ilyen feladat amit szeretnék megoldani, csak nem tudom, hogy az Access egyáltalán tud e olyat csinálni, hogy mikor indítok egy lekérdezést, akkor feldob egy ablakot, hogy írjam be neki a tól-ig et. Másfelől meg szerintem, az "egy minimális Access tudást illene magadra szedni, mielőtt kérdezel." nagyon kedves és segítőkész hozzáállás. martonx őstagként azt hinném, hogy ezt a látásmódot ezzel a titulussal sikeresen magadra szedted már mióta a PH-ra írogatsz. Látszik, hogy nem sikerült, viszont tedd meg, ha már nem vagy hajlandó segíteni, ne is gátold, hogy más építő jelleggel szóljon hozzá és inkább ne is írj. Köszönöm!

A tudás mindenkié!!!

(#1841) Ispy válasza retes (#1838) üzenetére


Ispy
veterán

Melyik Access verzió? ADP vagy MDB?

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#1842) retes válasza Ispy (#1841) üzenetére


retes
aktív tag

Microsoft Access 2007 MDB, viszont jó lenne, ha működne 2000-ben is.

[ Szerkesztve ]

A tudás mindenkié!!!

(#1843) Ispy válasza retes (#1842) üzenetére


Ispy
veterán

Ha MDB, akkor ezt nézd meg.

"Debugging is like being the detective in a crime movie where you're also the murderer."

(#1844) retes válasza Ispy (#1843) üzenetére


retes
aktív tag

Köszönöm már nézem is!

A tudás mindenkié!!!

(#1845) retes válasza Ispy (#1843) üzenetére


retes
aktív tag

Nagyon köszönöm a segítséged, már sikerült is megoldani! :))

A tudás mindenkié!!!

(#1846) martonx


martonx
veterán

Hát ez baromi jó: sqlfiddle

Ettől kezdve csak akkor segítek, ha valaki ide fel is teszi a példa táblá(it)ját, példa adatokkal persze. ;]

Gyorsan össze is dobtam benne egy göngyölített összegzést, hogy kipróbáljam. link

Én kérek elnézést!

(#1847) Petya25


Petya25
addikt

Kéne nekem valami olyan riportoló eszköz, ami MS SQL-ből olvasna és táblázatot, diagrammot tudna kitolni ügyfelnként mélben, amiben mindenki a maga adatait kapná csak.
Van rá valami ötlet?

[ Szerkesztve ]

Antonio Coimbra de la Coronilla y Azevedo, bizony!

(#1848) DS39 válasza Petya25 (#1847) üzenetére


DS39
nagyúr

SSRS-sel elkészítesz egy paraméteres riportot, majd itt egy lehetséges megoldás a kiküldésre: [link]

(#1849) martonx válasza Petya25 (#1847) üzenetére


martonx
veterán

Írsz rá egy kis programocskát, aztán az pont ezt fogja tudni, legalábbis a táblázat részéig elég triviális.
Az más kérdés, hogy diagramm nehezen lesz benne, bár kerülő utakkal biztos tudsz diagrammot képként generáltatni valamilyen eszközzel, és a képet már bele tudod szúrni a html formátumú emailbe.

Én kérek elnézést!

(#1850) DS39 válasza martonx (#1849) üzenetére


DS39
nagyúr

teljesen felesleges újra feltalálni a spanyol viaszt. az SQL Server Business Intelligence része egy igen professzionális riportoló eszközt (Reporting Services) tartalmaz.

remek dinamikus (paraméter szerinti) táblázatok, és diagramok készíthetők vele [link]

az email-ben kiküldés kicsit macerás, de ahogy alább linkeltem megoldható.

[ Szerkesztve ]

Útvonal

Fórumok  »  Szoftverfejlesztés  »  SQL kérdések (kiemelt téma)
Copyright © 2000-2024 PROHARDVER Informatikai Kft.