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

#1 14. 3. 2014 23:40:28

kralix
Člen
Registrace: 24. 4. 2012
Příspěvků: 6

Nebere časový údaj YEAR - VYŘEŠENO

Dobrý den,
postupuji podle tutorialu pro starší verzi Base (Base Tutorial: From Newbie to Advocate in a one, two... three!), ale nová verze mi nebere dotaz:

SELECT AVG(("Operace stenózy"."Datum" - "Pacient"."Datum narození") YEAR) FROM "Operace stenózy", "Pacient" WHERE "Operace stenózy"."RČ" = "Pacient"."RČ";

Hlásí mi to chybu syntaxe a programu se nelíbí ten údaj YEAR.
Aktuálně užívám LibreOffice 4.2.1
Nevíte někdo, jaká má být aktuální syntaxe?
Respektive nebere to ani alternativu s DATEDIFF... sad
Díky, Králík

Editoval kralix (15. 3. 2014 14:54:10)

Offline

#2 15. 3. 2014 10:06:05

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

Re: Nebere časový údaj YEAR - VYŘEŠENO

Toto bude dáno zřejmě formátem pole pro datum. Pokud vím, tak například vyhledávání samostatného roku vyžaduje také kolonku (sloupec) s údajem pouze rok - tedy například 2014, nikoliv položku typu NOW, která vrací celé datum například 01.03.2014. Z takového formátu samostatně rok nevytěžíte. Jde tedy nejspíš o formátování polí tabulky. Musel byste asi postnout ukázku. Takhle se to nedá dohledat.

Editoval neutr (15. 3. 2014 10:06:25)


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

Offline

#3 15. 3. 2014 10:33:30

kralix
Člen
Registrace: 24. 4. 2012
Příspěvků: 6

Re: Nebere časový údaj YEAR - VYŘEŠENO

Díky za tip. V návodu ale taky používaly formát pole DATE

Offline

#4 15. 3. 2014 11:29:54

kralix
Člen
Registrace: 24. 4. 2012
Příspěvků: 6

Re: Nebere časový údaj YEAR - VYŘEŠENO

Tak funguje tohle:
SELECT AVG( DATEDIFF( 'mm', "Operace stenózy"."Datum", "Pacient"."Datum narození")) FROM "Operace stenózy", "Pacient" WHERE "Operace stenózy"."RČ" = "Pacient"."RČ";
Jen to hodí znaménko minus, ale vypadá to reálně.
Ještě zabojuji v max, min a směrodatné odchylce.
Držte mi palce, Králík

Offline

#5 15. 3. 2014 11:36:32

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

Re: Nebere časový údaj YEAR - VYŘEŠENO

Ano ale date je prakticky totožné s jinými datovými funkcemi. Syntaxe DATE(Rok; Měsíc; Den). Z toho také podle mne nejde vytěžit jen rok. Samostatně zadávat rok (YEAR) nemá ani moc smyslu. Tato funkce slouží k tomu, aby se dal psát rok jen pomocí 2 číslic. Takže kolonka se může jmenovat ROK (Year), ale pole může být číslelné. Do formuláře pak můžete dát pro zadávání výběr například kombinovaným seznamem a podobně.
SQL pak nemusíte týrat formátem :-)


PS
     Dokonce bych tak zadával i den a měsíc. Například RČ(číslo pojištěnce) bych udělal jako alias (Číslo pojištěnce ap.), který slučuje například kolonky den x 100000000 + měsíc x 1000000 + rok(jako LEFT(Rok;2) x 10000 + číslo za lomítkem ve formátu 4 čísel.
     Samozřejmě může nastat problém s mužem a ženou, takže u měsíce se dá přičítat ještě tuším 50 aby se odlišilo pohlaví. Dalším problémem by mohli být stolotí lidé. Tady bych si tipnul, že specializované datumové funkce by vyhodily chybu. Nevím jestli vyšechny, ale začínají pro dvojmístný rok od roku 1930. Obecně funkce mohou pracovat bez nějakého problému s daty od roku 1900. Existují ale možnosti pro datové funkce od roku někde 1530 (nevím přesně). Tyto ale špatně počítají přestupné roky aj. Takovým problémům se snadno vyhnete právě zadáváním čísel.
     Vzorec pro aliasy nemusí být matematickým součtem, ale řetězcem String. den & měsíc & rok & "/" & číslo za lomítkem.


     SQL pak může hledat opravdu čísla, které se ale v pohledu, ani sestavě neobjeví. Prakticky se vyhnete všem možným záludnostem datumových formátů.

Editoval neutr (15. 3. 2014 12:17:08)


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

Offline

#6 15. 3. 2014 12:09:39

kralix
Člen
Registrace: 24. 4. 2012
Příspěvků: 6

Re: Nebere časový údaj YEAR - VYŘEŠENO

Nejsem si jistý, jestli rozumím odpovědi. Původně nefungovalo nic z YEAR ani MONTH ani DATE v původní syntaxi.
Věk na 2 číslice by mi bohatě stačil. A místo 'mm' funguje i 'yy'. Ve formuláři jsem používal dokonce datum operace ve formátu dd.mm.yy, pacienty jsem zadával přímo do tabulky v dd.mm.yyyy. A ve vytváření tabulky byla pro obě proměnná DATE NOT NULL.
Nicméně výše uvedené řešení funguje i pro funkce MIN(DATEDIFF...) MAX STDDEV_POP. Ale opět s opačným znaménkem včetně záměny funkcí MIN, MAX... hmm
@neutr, děkuji za komentáře
Králík

Offline

#7 15. 3. 2014 12:24:29

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

Re: Nebere časový údaj YEAR - VYŘEŠENO

To mínus je dáno špatným pořadím členů rozdílu. Je to možné vyřešit vynásobením záporným číslem (-1), nebo napsáním vlastního aliasu (Například DATE_Dnešní - DATE_Narození).


To že původně nefungovaly uvedené funkce bylo asi dáno tím, že měly původní dokumenty nastaveno jiné časové pásmo, respektive například americký formát. V LO existují 2 embending databáze a z toho také mohlo vzejít chybné vyhodnocení. Lo má navíc implementovánu databázi Firebird která to mohla udělat. Pokud jste podruhé otevřel klasickou databázi (tuším HSQL) problém asi vymizel.


Osobně bych to řešil v Calcu. Tedy je možné, že Váš zdroj je prakticky uceleným programem pro zdravotnické zařízení. Proto je možné, že ho lze používat s minimálními úpravami. Pokud ne určitě bych doporučil Calc místo Base.

Editoval neutr (15. 3. 2014 12:41:07)


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

Offline

Zápatí