Pocet zmen hodnoty ve sloupci u window funkce

30 views
Skip to first unread message

tomas.emresz

unread,
Dec 19, 2022, 12:16:25 PM12/19/22
to PostgreSQL-cz
Zdarec,
tak jsem zase narazil na novinku (tentokrat uz ne ze zakladu snad).
Sestavuju si tady pohled planu praci, kdy je treba nektere ukoly stihnout do daneho terminu, ovsem jde i o optimalizaci casu - reknemes vymena stroje (uklid stroje, zameteni pracoviste, vyndani jineho stroje).

Aktualne mam treba stroj1, do konce pracovni doby mam 6 hodin.

Ukol - typ stroje, ma byt hotovo, delka prace
Ukol1 - stroj2 - dnes - hodina
Ukol2 - stroj1 - zitra - 3hodiny
Ukol3 - stroj1 - pozitri - 1hodina

Samozrejme se muzu vrhnout na vymenu stroje a zacit ukolem1, ale je videt, ze mohu udelat ukoly2 a 3, pak vymenit stroj (coz trva nejakou dobu, treba 30minut) a stihnu ukol1 mit dnes. Potrebuju tedy udelat dotaz, ktery mi spocita kazdou zmenu polozky typ stroje. Dle toho pak optimalizuju zdlouhave meziprace tak, abych mel praci vcas a pritom neztracel minuty neustalymi uklidy. (Zdanlive tento priklad mohu udelat i podobne jako trik na pgsql.cz - Rozdělení lidí do skupin s omezením, jde mi vsak i o dalsi souvislosti, takze se mi hodi ten vypocet kolikrat se dany sloupec zmenil (tomu pak uzpusobim order by apod, aby byl co nejnizsi..)

Nakopnete me nejakym smerem?
Diky
Tom


Pavel Stehule

unread,
Dec 19, 2022, 12:52:37 PM12/19/22
to postgr...@googlegroups.com


po 19. 12. 2022 v 18:16 odesílatel tomas.emresz <tomas....@iqsolutions.cz> napsal:
tohle je optimalizacni uloha. V SQL na to muzes jit kartezakem, ze vyzkousis vsechny moznosti, ale urcite to nebude vypocetne efektivni. Na tohle SQL neni navrzene.

Asi by to mohla byt nejaka variace optimalizace batohu https://www.algoritmy.net/article/5521/Batoh . Nicmene operacni vyzkum (to je ta cast matematiky, ktera se tomuhle venuje), jsem videl naposledy pred 25 roky, kdyz jsem se pripravoval na statnice a uz se mi to vykourilo z hlavy. Ta data bych si nacetl do pole, a hral bych si s tim nejakym jednoduchym algoritmem v pameti. V podstate zkousis vsechny mozne kombinace, pricemz si pamatujes nejlepsi dosazenou, a v momente, kdy testovaci uz je horsi nez nejlepsi nalezena, tak jdes okamzite na dalsi.

Jde o to napsat kod, ktery ti vygeneruje vsechna mozna reseni. To ani nemusi byt moc slozite (je to rekurze nebo nnasobny cyklus). Pokud tech reseni moc neni, tak tim muzes skoncit. Pokud tech reseni je hodne, tak to sebou nese dalsi komplikace, protoze nechces cekat treba desitky minut nez ti dobehne vypocet, a pak se vymysli ruzne heuristiky a chytristiky, abys to zrychlil.


Diky
Tom


--
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „PostgreSQL-cz“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu postgresql-c...@googlegroups.com.
Chcete-li tuto diskusi zobrazit na webu, navštivte https://groups.google.com/d/msgid/postgresql-cz/2c48e28c-d318-458b-ba2f-326e2b5a3982n%40googlegroups.com.

tomas.emresz

unread,
Dec 19, 2022, 1:10:57 PM12/19/22
to PostgreSQL-cz
Ja bych to tolik nehrotil, ono poradi si uz vyresim o to zde uplne neslo. Spise mi slo o to, jestli existuje nejaka funkce v ramci analytik, ktera by rekla v ramci window, v tomhle sloupci se hodnota zmenila 5*. apod.
tedy u tabulek s hodnotami 
1,1,1,2,2,2 - bude vysledek 1
1,2,1,2,1,2 - by byl vysledek 6
Tim se mi pekne spocita doba stravena nad danym projektem, a samotnou optimalizaci de facto provedu order by a posleze trikem s umistenim 750kg baliku (zde je to opravdu jednoduche, pokud mam mit praci hotovou v 5 odpoledne a vim, ze bude trvat 2hodiny, do te doby mohu delat cokoliv, co bude mit nizsi cenu nez do 3odpoledne ( a tu cenu opet spocitam de facto poctem tehle zmen). 

Dne pondělí 19. prosince 2022 v 18:52:37 UTC+1 uživatel Pavel Stěhule napsal:

Pavel Stehule

unread,
Dec 19, 2022, 1:34:07 PM12/19/22
to postgr...@googlegroups.com


po 19. 12. 2022 v 19:11 odesílatel tomas.emresz <tomas....@iqsolutions.cz> napsal:
Ja bych to tolik nehrotil, ono poradi si uz vyresim o to zde uplne neslo. Spise mi slo o to, jestli existuje nejaka funkce v ramci analytik, ktera by rekla v ramci window, v tomhle sloupci se hodnota zmenila 5*. apod.
tedy u tabulek s hodnotami 
1,1,1,2,2,2 - bude vysledek 1
1,2,1,2,1,2 - by byl vysledek 6
Tim se mi pekne spocita doba stravena nad danym projektem, a samotnou optimalizaci de facto provedu order by a posleze trikem s umistenim 750kg baliku (zde je to opravdu jednoduche, pokud mam mit praci hotovou v 5 odpoledne a vim, ze bude trvat 2hodiny, do te doby mohu delat cokoliv, co bude mit nizsi cenu nez do 3odpoledne ( a tu cenu opet spocitam de facto poctem tehle zmen). 

takova funkce primo v pg neni (mam pocit, ze tohle umi Oracle MATCH_RECOGNIZE, ale to v PG neni).

ale muzes pouzit

neco jako SELECT COUNT(CASE WHEN LAG(x,1) IS DISTINCT FROM x THEN 1 END) ...


Dne pondělí 19. prosince 2022 v 18:52:37 UTC+1 uživatel Pavel Stěhule napsal:


po 19. 12. 2022 v 18:16 odesílatel tomas.emresz <tomas....@iqsolutions.cz> napsal:
Zdarec,
tak jsem zase narazil na novinku (tentokrat uz ne ze zakladu snad).
Sestavuju si tady pohled planu praci, kdy je treba nektere ukoly stihnout do daneho terminu, ovsem jde i o optimalizaci casu - reknemes vymena stroje (uklid stroje, zameteni pracoviste, vyndani jineho stroje).

Aktualne mam treba stroj1, do konce pracovni doby mam 6 hodin.

Ukol - typ stroje, ma byt hotovo, delka prace
Ukol1 - stroj2 - dnes - hodina
Ukol2 - stroj1 - zitra - 3hodiny
Ukol3 - stroj1 - pozitri - 1hodina

Samozrejme se muzu vrhnout na vymenu stroje a zacit ukolem1, ale je videt, ze mohu udelat ukoly2 a 3, pak vymenit stroj (coz trva nejakou dobu, treba 30minut) a stihnu ukol1 mit dnes. Potrebuju tedy udelat dotaz, ktery mi spocita kazdou zmenu polozky typ stroje. Dle toho pak optimalizuju zdlouhave meziprace tak, abych mel praci vcas a pritom neztracel minuty neustalymi uklidy. (Zdanlive tento priklad mohu udelat i podobne jako trik na pgsql.cz - Rozdělení lidí do skupin s omezením, jde mi vsak i o dalsi souvislosti, takze se mi hodi ten vypocet kolikrat se dany sloupec zmenil (tomu pak uzpusobim order by apod, aby byl co nejnizsi..)

Nakopnete me nejakym smerem?

tohle je optimalizacni uloha. V SQL na to muzes jit kartezakem, ze vyzkousis vsechny moznosti, ale urcite to nebude vypocetne efektivni. Na tohle SQL neni navrzene.

Asi by to mohla byt nejaka variace optimalizace batohu https://www.algoritmy.net/article/5521/Batoh . Nicmene operacni vyzkum (to je ta cast matematiky, ktera se tomuhle venuje), jsem videl naposledy pred 25 roky, kdyz jsem se pripravoval na statnice a uz se mi to vykourilo z hlavy. Ta data bych si nacetl do pole, a hral bych si s tim nejakym jednoduchym algoritmem v pameti. V podstate zkousis vsechny mozne kombinace, pricemz si pamatujes nejlepsi dosazenou, a v momente, kdy testovaci uz je horsi nez nejlepsi nalezena, tak jdes okamzite na dalsi.

Jde o to napsat kod, ktery ti vygeneruje vsechna mozna reseni. To ani nemusi byt moc slozite (je to rekurze nebo nnasobny cyklus). Pokud tech reseni moc neni, tak tim muzes skoncit. Pokud tech reseni je hodne, tak to sebou nese dalsi komplikace, protoze nechces cekat treba desitky minut nez ti dobehne vypocet, a pak se vymysli ruzne heuristiky a chytristiky, abys to zrychlil.


Diky
Tom


--
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „PostgreSQL-cz“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu postgresql-c...@googlegroups.com.
Chcete-li tuto diskusi zobrazit na webu, navštivte https://groups.google.com/d/msgid/postgresql-cz/2c48e28c-d318-458b-ba2f-326e2b5a3982n%40googlegroups.com.

--
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „PostgreSQL-cz“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu postgresql-c...@googlegroups.com.

Aleš Zelený

unread,
Feb 15, 2023, 5:13:28 PM2/15/23
to PostgreSQL-cz
Ahoj,

pokud to chapu dobre, Pavel to trefil. Pro motivaci doporucuji treba clanek, me to poslouzilo jako zaklad k hledani lokalnich extremu, jen to ted nemuzu narychlo vyhrabat z suplete (nekde na disku to je, ale na kterem, ze... :-) ).

ales

Dne pondělí 19. prosince 2022 v 19:34:07 UTC+1 uživatel pavel....@gmail.com napsal:
Reply all
Reply to author
Forward
0 new messages