Rzutowanie typów PostgreSQL

0

Witam,

Dane:

ID_pracownika | data_utworzenia | premia | okres
11 | 2016-09-13 0000 | 10 | M09
12 | 2016-09-14 0000 | 9 | M09
10 | 2016-09-19 0000 | 8 | M09
11 | 2016-09-13 0000 | 7 | M09
11 | 2016-09-13 0000 | 2 | M09
12 | 2016-09-14 0000 | 1 | M09
12 | 2016-09-17 0000 | 11 | M09
12 | 2016-09-17 0000 | 4 | M09
10 | 2016-09-10 0000 | 6 | M09

Chciałbym zsumować premie pracowników z tabeli powyżej.
Mam takie typy pół: ID_pracownik (integer), data_utworzenia (timestamp without time zone), premia(integer), okres(character)

W treści zapytania mam fragment kodu który mi wyrzuca błąd:

case cast(max(data_utworzenia) as boolean) when okres in ('M09') then sum(premia) end as "PREMIA" 

chodzi dokładnie o to, że nie mogę sobie poradzić z typem danych "timestamp without time zone", poniżej monit błędu jakie otrzymuje:

BŁĄD: nie można rzutować typu timestamp without time zone na boolean
LINE 8: case cast(max(data_utworzenia) as boolean) when d...
^
* Błąd **********

BŁĄD: nie można rzutować typu timestamp without time zone na boolean
Stan SQL: 42846
Znak: 560

Dziękuje za pomoc i sugestie.

0

Komunikat jest dość jasny, nie bardzo wiem co za wartość chcesz osiągnąć rzutując datę na boola, tzn. kiedy wg. Ciebie będzie False a kiedy True?

0

Tak jak napisałem chciałem otrzymać sumę premii dla każdego z pracowników, która została przyznana w określonym dniu miesiąca.
Myślałem, że za pomocą case to się uda zrobić ?

0

A po co używać tu case? Na podstawie tego co przedstawiłeś wystarczy:

SELECT 
    id_pracownika,
    data_utworzenia,
    okres,
    sum(premia) as  PREMIA,
FROM
    tabels
GROUP BY
    id_pracownika,
    data_utworzenia,
    okres
0

No tak wygląda łatwo ale jak tak napisze zapytanie to sumowane są wszystkie premie według miesiąca a ja potrzebuje aby sumy były z podziałem na dzień a nie na miesiąc.

0

nie wiem czy postreSQL ma coś takiego jak funkcja DAY() w SQL SERVER, jeśli tak to wyciągasz dzień z daty i później grupujesz wg ID_pracownika i wg dnia z daty.

0

Z funkcją DAY też mi to nie działa, chyba że źle to robię

DAY(data_utworzenia) 
0

Cos chyba źle opisujesz problem bo mi to działa i sumuje na każdy dzień: http://sqlfiddle.com/#!15/6b641/1/0

0

otrzymałem taki wynik

data_utworzenia okres premia
2016-09-13 0000 M01 5280
2016-09-13 0000 M06 5280
2016-09-13 0000 M07 5280
2016-09-13 0000 M03 5280
2016-09-13 0000 M08 5280
2016-09-13 0000 M12 5280
2016-09-13 0000 M10 5280
2016-09-13 0000 M02 5280
2016-09-13 0000 M11 5280
2016-09-13 0000 M09 5280
2016-09-13 0000 M05 5280
2016-09-13 0000 M04 5280

Błąd jest taki, że w kolumnie okres zrobiła mi się suma z premii z całego roku czyli z okresów M01 + M02 + ... + M12

0
mieszko24 napisał(a):

||ID_pracownika||data_utworzenia||premia||okres
||11||2016-09-13 0000||10||M09
||12||2016-09-14 0000||9||M09
||10||2016-09-19 0000||8||M09
||11||2016-09-13 0000||7||M09
||11||2016-09-13 0000||2||M09
||12||2016-09-14 0000||1||M09
||12||2016-09-17 0000||11||M09
||12||2016-09-17 0000||4||M09
||10||2016-09-10 0000||6||M09

to teraz jeszcze napisz jaki ma być wynik bo na razie to jest zgaduj zgadula

0

Czekaj wyciągam szklaną kulę, żeby Ci pomóc...

A tak serio:

  • dane z wyniku mają się nijak do postu pierwszego
  • nie wiem jakie zapytanie puściłeś, bo na pewno nie takie jak ja podałem

Więc jak liczysz na odpowiedź zacznij traktować Nas poważnie...

0

dane do zapytania mają format deklaracji

jeśli mam datę
2016-09-13 0000 to przy niej deklaruje od razu 12 okresów M01 ... M12 i w każdym okresie mogą być przyznane po kilka kwot np. premii co chcę sumować (te dane chcę pobierać w zapytaniu)

jeśli wcześniej moja deklaracja była inna miała datę
2015-05-13 0000 to na niej też deklarowałem od razu 12 okresów M01 ... M12 i w każdym okresie mogą być przyznane po kilka kwot np. premii co chcę sumować

itd wstecz historii mojej deklaracji

1

nie, nie, nie - nie opisujemy, nie snujemy opowieści. Dajesz przykładowe dane ale odpowiadające tym, które masz, w szczególności jeśli chodzi o strukturę bazy oraz to jaki byś chciał dostać wynik.

0

dokładnie dane są takie jak w załączniku

wynik ma przedstawić suma(dek_poj.pojemnosc * dek_poj.czestotliwosc) z podziałem na miesiące OKRES z uwzględnieniem rz_daty_utworzenia

0

gościu bo tego się prościej już nie da - co to znaczy z uwzględnieniem rz_daty_utworzenia??????? Zrozum, że my tu szklanych kul nie mamy i nie wiemy o co Ci chodzi, w szczególności kiedy dostałeś już kilka odpowiedzi.

select (pojemnosc * czestotoliwosc), okres from tabela group by okres - masz dokładnie to co chcesz poza z uwzględnieniem rz_daty_utworzenia bo nie mam pojęcia co z tym zrobić.

0

No to zaczynamy rozmawiać: http://sqlfiddle.com/#!15/9cd15/5

dane skrócone ze względu na ograniczenia fiddle

0

OK dziękuje za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1