ďťż
 
[PL-SQL] Przedzialy czasowe ďťż
 
[PL-SQL] Przedzialy czasowe
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

[PL-SQL] Przedzialy czasowe



Sławek Mróz - 30-10-2005 10:51
[PL-SQL] Przedzialy czasowe
  Witam!

Mam sobie tabelke w bazie Oraclowej, dajmy na to z nastepujacymi kolumnami:

'id' - czyli id zlecenia
'status' - czyli osiagniety status zlecenia
'czas' - czyli czas wykonywania jakiejs tam operacji.

Jak skonstruowac zapytanie, zeby zwrocilo mi ilosci wykonanych operacji (czyli ilosci
rekordow) dla ustalonych przeze mnie przedzialow czasowych, np:

status1, 8-8.59, 2
status1, 9-9.59, 5
status1, 10-10.59 - 8
status2, 8-8.59, 5

itd, itp.

Zapewne przyda sie tu SUM i CASE, ale nie do konca wiem, jakiej dokladnie skladni
uzyc, bo eksperymenty z 'between' oraz >='8:00' and <'9:00' nie powiodly sie.

Gdyby jeszcze udalo sie zapisac taki warunek, ze do zliczania brane sa tylko wartosci
minimalne czasu dla konkretnego zlecenia i statusu (bo o dziwo w bazie zlecenie moze
osiagnac ten sam status wielokrotnie, zas mnie interesuje, kiedy osiagnieto dany
status po raz pierwszy), to juz byloby rewelacyjnie.

Dzieki z gory, w razie problemow ze zrozumieniem tego pokreconego problemu, sluze
pomoca:)

Pozdr
Slawek





fasol - 30-10-2005 10:51

 
> Mam sobie tabelke w bazie Oraclowej, dajmy na to z nastepujacymi
kolumnami:
>
> 'id' - czyli id zlecenia
> 'status' - czyli osiagniety status zlecenia
> 'czas' - czyli czas wykonywania jakiejs tam operacji.
>
>
> Jak skonstruowac zapytanie, zeby zwrocilo mi ilosci wykonanych operacji
(czyli ilosci
> rekordow) dla ustalonych przeze mnie przedzialow czasowych, np:
>
> status1, 8-8.59, 2
> status1, 9-9.59, 5
> status1, 10-10.59 - 8
> status2, 8-8.59, 5
>
> itd, itp.
>
> Zapewne przyda sie tu SUM i CASE, ale nie do konca wiem, jakiej dokladnie
skladni
> uzyc, bo eksperymenty z 'between' oraz >='8:00' and <'9:00' nie powiodly
sie.
>
> Gdyby jeszcze udalo sie zapisac taki warunek, ze do zliczania brane sa
tylko wartosci
> minimalne czasu dla konkretnego zlecenia i statusu (bo o dziwo w bazie
zlecenie moze
> osiagnac ten sam status wielokrotnie, zas mnie interesuje, kiedy
osiagnieto dany
> status po raz pierwszy), to juz byloby rewelacyjnie.
>
> Dzieki z gory, w razie problemow ze zrozumieniem tego pokreconego
problemu, sluze
> pomoca:)
>

to_char
to_date

http://www.techonthenet.com/oracle/




Morff - 30-10-2005 10:51

  Sławek Mróz napisał(a):
> Witam!
>
> Mam sobie tabelke w bazie Oraclowej, dajmy na to z nastepujacymi kolumnami:
>
> 'id' - czyli id zlecenia
> 'status' - czyli osiagniety status zlecenia
> 'czas' - czyli czas wykonywania jakiejs tam operacji.
>
>
> Jak skonstruowac zapytanie, zeby zwrocilo mi ilosci wykonanych operacji (czyli ilosci
> rekordow) dla ustalonych przeze mnie przedzialow czasowych, np:
>
> status1, 8-8.59, 2
> status1, 9-9.59, 5
> status1, 10-10.59 - 8
> status2, 8-8.59, 5

select id,status,count(*) as ile
from tabelka
where to_char(czas,'HH24') = '&Godzina'
group by id,status

to akurat najłatwiejszy przypadek , bo w przykładzie pokazałeś ze
przedział wynosi godzine ..

select id,status,count(*) as ile
from tabelka
where to_char(czas,'HH24:MI') between '&Od' and '&Do'
group by id,status

gdzie np. od = 10:00 , do = 10:59

> Gdyby jeszcze udalo sie zapisac taki warunek, ze do zliczania brane sa tylko wartosci
> minimalne czasu dla konkretnego zlecenia i statusu (bo o dziwo w bazie zlecenie moze
> osiagnac ten sam status wielokrotnie, zas mnie interesuje, kiedy osiagnieto dany
> status po raz pierwszy), to juz byloby rewelacyjnie.

gdybyś miał jakiś klucz główny w tej tabeli , byłoby łatwiej ..
Zadam pytanie pomocnicze ... Po co zliczać czasy minimalne statusów ?
jezeli status wystąpił pierwszy raz o 10:00 to jezeli wybierzesz
przedział 11:00 - 11:59 to nie chcesz go zobaczyć ?

--
Pozdrawiam
Morff
----------
AQQ 141151




Sławek Mróz - 30-10-2005 10:51

  (...)
Dzieki za sugestie, bede analizowac:)

> gdybyś miał jakiś klucz główny w tej tabeli , byłoby łatwiej ..
> Zadam pytanie pomocnicze ... Po co zliczać czasy minimalne statusów ?
> jezeli status wystąpił pierwszy raz o 10:00 to jezeli wybierzesz przedział 11:00 -
> 11:59 to nie chcesz go zobaczyć ?

Akurat dla potrzeb tego raportu nie potrzebuje pozostalych, tylko ten najwczesniejszy.
Z kluczem glownym jest klopot. To baza, do ktorej w zasadzie mam dostep read-only.

Jezeli mimo to uda sie znalezc jakies rozwiazanie, bede wdzieczny:)

Pozdr
Slawek





fasol - 30-10-2005 10:51

  >
> Akurat dla potrzeb tego raportu nie potrzebuje pozostalych, tylko ten
najwczesniejszy.
> Z kluczem glownym jest klopot. To baza, do ktorej w zasadzie mam dostep
read-only.
>
> Jezeli mimo to uda sie znalezc jakies rozwiazanie, bede wdzieczny:)
>

Jeżeli interesuje Cię tylko kiedy po raz pierwszy osiągnięto określony
status to tylko

select 'Status 1' as Status, min(czas) as Pierwsze
from tabelka
where to_char(czas,'hh24mi') between '0700' and '0729'

union

select 'Status 2' as Status, min(czas)
from tabelka
where to_char(czas,'hh24mi') between '0730' and '0759';

A na marginesie to w ORACLU zamiast klucza głównego można użyć ROWID




Morff - 30-10-2005 10:51

  fasol napisał(a):

> Jeżeli interesuje Cię tylko kiedy po raz pierwszy osiągnięto określony
> status to tylko

nie rozumiem stwierdzenia "tylko" i podziału na połowy godziny i uniona ..

SELECT id,COUNT(*)
FROM tabelka
WHERE
(id,status,czas)
IN
(SELECT id,status,MIN(czas)
FROM
tabelka
WHERE to_char(czas,'HH24:MI') BETWEEN '&OD' AND '&DO'
GROUP BY id,status)
GROUP BY id

> A na marginesie to w ORACLU zamiast klucza głównego można użyć ROWID

... super

--
Pozdrawiam
Morff
----------
AQQ 141151




fasol - 30-10-2005 10:51

  > nie rozumiem stwierdzenia "tylko" i podziału na połowy godziny i uniona ..
>
> SELECT id,COUNT(*)
> FROM tabelka
> WHERE
> (id,status,czas)
> IN
> (SELECT id,status,MIN(czas)
> FROM
> tabelka
> WHERE to_char(czas,'HH24:MI') BETWEEN '&OD' AND '&DO'
> GROUP BY id,status)
> GROUP BY id
>

Co Ty tu insynuujesz.
Od kiedy mozna użyć IN w takiej konstrukcji? Tego nawet ORACLE nie
przełknie. Przynajmniej w wersji 8. A przede wszystkim to określ co chcesz
osiągnąć.




Morff - 30-10-2005 10:51

  fasol napisał(a):

> Co Ty tu insynuujesz.
> Od kiedy mozna użyć IN w takiej konstrukcji? Tego nawet ORACLE nie
> przełknie. Przynajmniej w wersji 8.

insynuuję ze w wersji 8.1.7 przełknie ...

A przede wszystkim to określ co chcesz
> osiągnąć.

pokazać ze dla danego ID_zlecenia status zmienił sie np 3 razy w zadanym
okresie czasu.

--
Pozdrawiam
Morff
----------
AQQ 141151




Morff - 30-10-2005 10:51

 
> insynuuję ze w wersji 8.1.7 przełknie ...

oo ... na 8.1.6.2 też zadziałało ..
więc insynuuję na na 8i zadziała :)

--
Pozdrawiam
Morff
----------
AQQ 141151




fasol - 30-10-2005 10:51

  > > insynuuję ze w wersji 8.1.7 przełknie ...
>
> oo ... na 8.1.6.2 też zadziałało ..
> więc insynuuję na na 8i zadziała :)
>
No dobrze zadziała. Ale Ty nie odpowiadasz na pytanie, który rekord jest
najwcześniejszy z tych trzech co zdarzyły sie w okreslonym czasie.




Morff - 30-10-2005 10:51

  fasol napisał(a):
>>>insynuuję ze w wersji 8.1.7 przełknie ...
>>
>>oo ... na 8.1.6.2 też zadziałało ..
>>więc insynuuję na na 8i zadziała :)
>>
>
> No dobrze zadziała. Ale Ty nie odpowiadasz na pytanie, który rekord jest
> najwcześniejszy z tych trzech co zdarzyły sie w okreslonym czasie.

pytanie było :

Gdyby jeszcze udalo sie zapisac taki warunek, ze do zliczania brane sa
tylko wartosci minimalne czasu dla KONKRETNEGO ZLECENIA I STATUSU (bo o
dziwo w bazie zlecenie moze osiagnac ten sam status wielokrotnie, zas
mnie interesuje, kiedy osiagnieto dany status po raz pierwszy), to juz
byloby rewelacyjnie.

ja tak zrozumiałem zadanie .. A żeby pokazać najwcześniejszą datę
statusu w danym okresie czasu nie trzeba by tak kombinować.

--
Pozdrawiam
Morff
----------
AQQ 141151
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?= Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?= =?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?= [MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?= =?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?= [MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?= =?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?= =?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?= [newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?= ms sql server - =?ISO-8859-2?Q?domy=B6lny_format_kolumn_ty?==?ISO-8859-2?Q?pu_datetime?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • marcelq.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