ďťż
 
[oracle] czy da się ułożyć zapytanie realizujące.... ďťż
 
[oracle] czy da się ułożyć zapytanie realizujące....
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[oracle] czy da się ułożyć zapytanie realizujące....



Adam - 27-08-2006 00:21
[oracle] czy da się ułożyć zapytanie realizujące....
  Witam

Potrzebuję napisać zapytanie, lub jeśli to niemożliwe funkcję pl/sql, która
zwróci uporządkowaną listę okresów (początkowych dat, np 06/08/01) o zadanej
parametrem długości miesięcy, w których pojawił się co najmniej jeden wpis w
tabeli o strukturze:
id number primary key,
some_date timestamp.

Wydaje mi się, że zapytania nie da się ułożyć więc może macie jakieś sugestie
na funkcję?

Pozdrawiam,
Adam

--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/





Sławomir Szyszło - 28-08-2006 00:53

  Dnia Mon, 21 Aug 2006 21:15:35 +0000 (UTC), " Adam" <adamzrk.WYTNIJ@gazeta.pl>
wklepał(-a):

>Witam
>
> Potrzebuję napisać zapytanie, lub jeśli to niemożliwe funkcję pl/sql, która
>zwróci uporządkowaną listę okresów (początkowych dat, np 06/08/01) o zadanej
>parametrem długości miesięcy, w których pojawił się co najmniej jeden wpis w
>tabeli o strukturze:
> id number primary key,
> some_date timestamp.

Czy dobrze rozumiem - załóżmy np. okresy kwartalne i dane dla uproszczenia:

7, 2006-02-10
1, 2006-02-10
4, 2006-04-07
5, 2006-10-11
2, 2006-10-15
9, 2006-11-15

A w wyniku:

2006-01-01
2006-04-01
2006-10-01

Czy o to chodzi?

>Wydaje mi się, że zapytania nie da się ułożyć więc może macie jakieś sugestie
>na funkcję?

FUNCTION daj_okres (p_data in date) RETURN DATE IS
-- data startowa, od ktorej liczy sie okresy
d_startdate date := to_date('2005-01-01', 'yyyy-mm-dd');
n_ile_miesiecy number(4) := 3; -- długość okresu w miesiącach
n_roznica_miesiecy number; -- różnica między p_data a d_startdate w m-c
n_nr_okresu number; -- nr okresu dla p_data
BEGIN
-- różnica w miesiącach między podaną datą a startową
n_roznica_miesiecy := MONTHS_BETWEEN(p_data, d_startdate);
-- nr okresu = (liczba pełnych miesięcy / długość okresu)
nr_okresu := FLOOR(FLOOR(n_roznica_miesiecy) / n_ile_miesiecy);
RETURN ADD_MONTHS(d_startdate, nr_okresu * n_ile_miesiecy);
END;

Potem to chyba będzie:

SELECT DISTINCT daj_okres(some_date) FROM TABELA;

A timestampa to już sam obsłuż. :)
--
Sławomir Szyszło mailto:slaszysz@poczta.onet.pl
Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych
FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/
Archiwum http://groups.google.com/groups?grou...mp.bazy-danych
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Oracle 19g +Insert +Insert +Insert... [Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?= =?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?= [oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?= [oracle 10g] czy =?ISO-8859-2?Q?mo=BFna_wy=B3=B1czy=E6_wszys?==?ISO-8859-2?Q?tkie_wi=EAzy_w_schemacie=3F?= MSSQL Express czy Oracle Express =?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?= =?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?= Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?= =?iso-8859-2?q?[oracle_10g]_jak_da=E6_grant_do_gv$=2E=2E=2E=2E_=3F?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • ets2.xlx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com