Portál AbcLinuxu, 8. května 2025 08:29

Dotaz: FirebirdSQL - práce s DATE (GROUPování po dni, měsíci, roce...)

Johny z Podoli avatar 19.4.2011 12:16 Johny z Podoli | skóre: 26 | blog: rocfdebian
FirebirdSQL - práce s DATE (GROUPování po dni, měsíci, roce...)
Přečteno: 326×
Odpovědět | Admin
Mám tabulku bankovní výpis, obsahuje mj. sloupce DATUM, ČÁSTKA. Datum je YYYY-MM-DD, já potřebuji tento sloupec "virtuálně" rozddělit na dloupec DATUM_ROK, DATUM_MESIC, DATUM_DEN abych mohl podle těchto sloupců různě "GROUPNOUT" a sečíst kolik peněz v kterém dni přišlo. Od rána trápím google ale buď to nikdo neřeší nebo je to trivka a já na to jen nemohu přijít.

Potřebuji toto řešit obecně, programuji funkci na generování grafů, jedna osa bude vždy typu DATE/TIMESTAMP a druhá bude "cokoliv" se SUM/AVG a podobně :-)

prosím postrčte mě...

děkuji převelice ;-)

Johny
Můj web o táborech: Letní dětské tábory, Hudební tábor , Můj nový blog na Nul.cz

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.4.2011 16:25 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: FirebirdSQL - práce s DATE (GROUPování po dni, měsíci, roce...)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Něco jako:
SELECT SUM(castka) AS sumcastka FROM bankovnivypis GROUP BY EXTRACT(MONTH FROM datum)
(nemám po ruce funkční FirebirdSQL na odzkoušení…)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Johny z Podoli avatar 19.4.2011 21:09 Johny z Podoli | skóre: 26 | blog: rocfdebian
Rozbalit Rozbalit vše Re: FirebirdSQL - práce s DATE (GROUPování po dni, měsíci, roce...)
Děkuji velice, to je přesně to, co jsem potřeboval.

s pozdravem, Johny
Můj web o táborech: Letní dětské tábory, Hudební tábor , Můj nový blog na Nul.cz
20.4.2011 08:03 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: FirebirdSQL - práce s DATE (GROUPování po dni, měsíci, roce...)
Není zač.
Jen poznámka, výše uvedené vyjede jen 12 záznamů i za 5let, je to třeba doplnit o WHERE na max. 1 rok, nebo doplnit GROUP-ovaní.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Johny z Podoli avatar 20.4.2011 09:03 Johny z Podoli | skóre: 26 | blog: rocfdebian
Rozbalit Rozbalit vše Re: FirebirdSQL - práce s DATE (GROUPování po dni, měsíci, roce...)
To je mi úplně jasné ;-) Ještě jedna věc mě napadá, která by se mi líbila. Nicméně toto je asi už mimo hranice SQL a budu si muset poradit jinak. Když v nějaký den prostě není na účtu pohyb, tak ten den z výsledku zccela vypadne, klasicky SO a NE. V grafu je ale vhodné mít hezky den po dni, kvuli měřítku a pod. Nemáte nějaký nápad, jak tam těch "30" dní dát na tvrdo? Napadlo mě udělat si tabulku s 30 "číslama" a pak to leftjoinovat na ty datumy... nic lepšího asi není? Co?
Můj web o táborech: Letní dětské tábory, Hudební tábor , Můj nový blog na Nul.cz
20.4.2011 11:21 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: FirebirdSQL - práce s DATE (GROUPování po dni, měsíci, roce...)
Myslím si, že je to běžný postup, mít pomocnou tabulku a s tou to spojit.
Osobně mívám v DB pro tento účel (souvislé řady) často tabulku jen s id 0-10000 (většinou jen pro dny v měsíci, týdnu či roku).
PS: Ale stejně musíte ořezávat 28/29/30/31 podle daného měsíce :)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
20.4.2011 13:59 kuka
Rozbalit Rozbalit vše Re: FirebirdSQL - práce s DATE (GROUPování po dni, měsíci, roce...)
V principu se ta casova osa nejak "vygenerovat" asi musi. Delal bych to nejlepe pres dual, pripadne pres transakcni tabulku, do ktere bych si pred vytvarenim vygeneroval dny z casoveho obdobi, ktere mne zajima. To tedy v Oracle, nevim jestli je analogie takovych veci ve Firebirdu.
20.4.2011 15:27 Aleš
Rozbalit Rozbalit vše Re: FirebirdSQL - práce s DATE (GROUPování po dni, měsíci, roce...)
Viděl jsem řešení pomocí vložené procedury. Procedura generovala číselnou řadu pro zadaný měsíc a rok.
okbob avatar 20.4.2011 16:28 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
Rozbalit Rozbalit vše Re: FirebirdSQL - práce s DATE (GROUPování po dni, měsíci, roce...)
PostgreSQL má nejen pro tyto účely funkci generate_series
20.4.2011 18:16 l0gik | skóre: 22
Rozbalit Rozbalit vše Re: FirebirdSQL - práce s DATE (GROUPování po dni, měsíci, roce...)
Bez uložené procedury by šlo použít rekurzivní dotazy. Něco jako

WITH RECURSIVE date_series(date) AS (SELECT CAST('1.1.2000' AS DATE) FROM rdb$database UNION SELECT date + 1 FROM date_series WHERE date + 1 <= '1.1.2010' ) SELECT * FROM date_series;
20.4.2011 18:22 l0gik | skóre: 22
Rozbalit Rozbalit vše Re: FirebirdSQL - práce s DATE (GROUPování po dni, měsíci, roce...)
PS: Jestli rekurzivní dotazy neznáš, může to na Tebe působit jako magie, ale dotaz výše Ti vygeneruje řadu dat od 1.1.2000 do 1.1.2010 - a dokonce myslím i efektivnějc než uložená procedura. Zkoušel jsem ho teda jen v postgresql, ale dostatečně novej Firebird by to měl umět taky.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.