Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 1. 10. 2013 13:25:20

prokopvaclav
Člen
Registrace: 1. 10. 2013
Příspěvků: 1

Base neumí počítat

Dobrý den,
snažím se již druhý den dát dohromady jednu sestavu v Base. Problém je v tom, že base neumí počítat (nebo to neumím já)... Mám podobný dotaz:


DATEDIFF( 'second', "Vykaz"."Cas_od", "Vykaz"."Cas_do" ) / 28800 AS "Pocet_dnu


Výsledek mi ukáže počet dnů naprosto špatně. Pokud však na konci dělím pouze 480 vyjde mi dotaz přesně (pokud následně na kalkulačcce vydělím ještě 60).


Stejný problém mám i u času - potřebuji zjistit počet hodin - pokud vydělím výsledek 3600 vyjde mi nesmysl, pokud pouze dělím 60, vše je v pořádku. Pokud v DATEDIFF použiji hour dostanu velmi nepřesný výsledek.


Nevíte kde je chyba? Formátováním sloupce to není, přijde mi, že base nějak sám zaokrouhluje jak se mu zachce.



SELECT
"Vykaz"."Cas_od", "Vykaz"."Cas_do", "Zakazka"."Kod", "Operace"."Nazev", "Vykaz"."Pocet_ks", "Operace"."Norma", "Operace"."Tarif", "Pracovnik"."Jmeno",


DATEDIFF( 'second', "Vykaz"."Cas_od", "Vykaz"."Cas_do" ) / "Operace"."Cas" AS "Mel_vyrobit",


( 3600 * "Vykaz"."Pocet_ks" ) / ( DATEDIFF( 'second', "Vykaz"."Cas_od", "Vykaz"."Cas_do" ) * "Operace"."Norma" ) AS "Efektivita",


( "Vykaz"."Pocet_ks" * "Operace"."Cas" ) / 3600 AS "Cas_dle_normy",


DATEDIFF( 'second', "Vykaz"."Cas_od", "Vykaz"."Cas_do" ) / 60 AS "Skutecny_cas",


DATEDIFF( 'second', "Vykaz"."Cas_od", "Vykaz"."Cas_do" ) / 28800 AS "Pocet_dnu"


FROM
"Vykaz", "Pracovnik", "Operace", "Zakazka"


WHERE
"Vykaz"."Id_pracovnika" = "Pracovnik"."Id" AND "Vykaz"."Id_operace" = "Operace"."CisloOperace" AND "Vykaz"."Id_zakazky" = "Zakazka"."Id"



Všem díky za pomoc!

Editoval prokopvaclav (1. 10. 2013 13:27:27)

Offline

#2 2. 10. 2013 06:54:28

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,468

Re: Base neumí počítat

Asi by to chtělo, aby jste to sem postnul. Jde možná o to, jakou používáte verzi, nebo jakou databázi (dBase, txt, Adabas..), a nebo jestli máte správný ovladač (např MySQL). Ze samotných SQL dotazů to asi nikdo neodvodí. Funkce date a time se například řídí také dle nastaveného národního prostředí. To, co popisujete by spíš odpovídalo výpočtům mimo časové a datové funkce. Také ne všechny databáze podporují například vytváření relací. SQL není podporováno v plné funkcionalitě. Měly by chodit dobře snad jen příkazy Select. Funkce určené pro databáze začínají na "D" + název. Ale obecně platí, že není možné identifikovat problém bez ukázky. Často se stává, že pomocí slovního popisu bez ukázky dochází velice často k nedorozumění.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 4. 10. 2013 00:31:14

Schinagl
Člen
Registrace: 14. 2. 2007
Příspěvků: 36

Re: Base neumí počítat

Osobně si myslím, že máte někde chybná data. Funkce DATEDIFF('ss','2013-06-10','2013-06-20')/86400 vrátí 10 dni stejně jako DATEDIFF('dd','2013-06-10','2013-06-20'). Co to máte za konstantu 28800, den má 86400 s. DATEDIFF neumí pracovat jen s časem, musí mít kompletní formát DATE + TIME.

Offline

#4 23. 2. 2015 10:35:36

Dhokahai1
Člen
Registrace: 23. 2. 2015
Příspěvků: 1

Re: Base neumí počítat

Máte problém s tím že windows umožňuje běh 32 i 64 bit. programů. Používáte 32 bit OOo. Ty potřebují 32 bit Javu. 64 bit Java nepomůže.???

Offline

#5 23. 2. 2015 15:17:45

svacula1
Člen
Registrace: 19. 2. 2015
Příspěvků: 3

Re: Base neumí počítat

Funkcia DATEDIFF počíta správne. Návratová hodnota sa ukladá do typu INTEGER (celé číslo), teda pri výsledku v minutách sú nadbytočné sekundy ignorované, pri výsledku v hodinách sú nadbytočné minúty a sekundy ignorované atď. Ak sa celé číslo (INTEGER) delí, výsledkom je zase celé číslo (desatinné miesta sú ignorované). Ak pri výsledku funkcie v sekundách, potrebujete delením získať presný výsledok, musí sa to riešiť prevodom výsledku v sekundách typu INTEGER na typ NUMERIC, nastaviť počet desatinných miest a následne deliť.

Editoval svacula1 (23. 2. 2015 15:19:57)

Offline

#6 23. 2. 2015 15:38:33

hdplot
Člen
Registrace: 18. 2. 2015
Příspěvků: 116

Re: Base neumí počítat

Obdobnou věc jsem tu řešil nedávno. Výsledek mého snažení je nakonec tento dotaz:
SELECT "Cas_start", "Cas_stop", DATEDIFF( 'minute', "Cas_start", "Cas_stop" ) AS "Doba_minut", DATEDIFF( 'hour', "Cas_start", "Cas_stop" ) || ':' || DATEDIFF( 'minute', "Cas_start", "Cas_stop" ) - DATEDIFF( 'hour', "Cas_start", "Cas_stop" ) * 60 AS "Doba" FROM "Prubeh"

Výsledek dotazu ukazuje vstupní hodnoty (Cas_start a Cas_stop), rozdíl časů v minutách (AS Doba_minut) a převod na formát HH:MM. Muslím, že analogicky by to šlo použít i zde - čas v sekundách by se obdobně převedl na minuty, hodiny případně dny - pouhým rozšířením dotazu a změnou resp. doplněním parametru "minute", "hour" atd.

Offline

#7 23. 2. 2015 23:33:01

svacula1
Člen
Registrace: 19. 2. 2015
Příspěvků: 3

Re: Base neumí počítat

Musím upraviť svoj predchádzajúci príspevok v tom, že od výsledku v hodinách, mesiacoch a rokoch funkcia vráti rôzne výsledky. Ak deň Cas_star = Cas_stop alebo Cas_star < Cas_stop a hh:mi:ss Cas_start < Cas_stop výsledok je podľa očakávania. Ak však deň Cas_start < Cas_stop a hh:mi:ss Cas_start > Cas_stop výsledok je vyšší o 1. To isté platí aj u mm a yy.

Editoval svacula1 (24. 2. 2015 00:31:58)

Offline

#8 17. 3. 2015 10:17:56

student
Člen
Registrace: 27. 2. 2006
Příspěvků: 112

Re: Base neumí počítat

Takéto výpočty by som nechal na Calc
Dáta by som nechal v base, vytvoril šablónu v Calc kde by boli výpočty s datedif.
Následne pracovníka resp. všetkých naraz by som vyfiltroval v base a požadované údaje pre výpočet by som preniesol do Calc-u do vytvorenej šablóny so vzorcami.

Offline

Zápatí