Kwerenda - 4 pola daty

Użytkowanie programu bazodanowego
tomo
Posty: 6
Rejestracja: ndz lis 21, 2010 7:15 pm

Kwerenda - 4 pola daty

Post autor: tomo »

Witam
Wiec tak : mam 4 pola data1-data4 gdzie wprowadzam mniej wiecej takie wartosci :

Rekord 1 :
data1:2010-01-01
data2:2010-04-03
data3:2010-07-04
data4:2010-10-02

Rekord 2 :
data1:2010-01-02
data2:2010-05-01
data3:2010-08-16
data4:2010-12-02

Rekord 3:
data1:2010-02-01
data2:2010-08-02

Chcialbym stworzyc kwerende ktore wyrzuci mi np daty styczniowe (bez reszty dat) czyli powinno stworzyc

Rekord 1 :
data1:2010-01-01
Rekord 2 :
data1:2010-01-02

Sierpien :
Rekord 2 :
data3:2010-08-16
Rekord 3:
data2:2010-08-02

Zawsze wywala mi reszte dat co srednio mnie interesuje (bo akurat chodzi o daty z konkretnego miesiaca)
Prosze o jakies pomysly
Pozdrawiam
OpenOffice 2.4.1 + Debian 2.6.26
Jan_J
Posty: 4626
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Kwerenda - 4 pola daty

Post autor: Jan_J »

,,Równorzędne '' traktowanie wyników z różnych kolumn jest nienaturalne dla baz danych.
Jeżeli widzisz taką konieczność, to być może masz bardzo specyficzny problem, ale najprawdopodobniej wiąże się to z wadą projektu bazy danych.

Takie zapytanie da się zbudować w oparciu o podzapytania skorelowane, ale stopień jego komplikacji będzie niewspółmierny w stosunku do złożoności samego problemu.

Łatwiej będzie zbudować zapytanie z konstrukcją warunkową, np. casewhen(...), zwracającą albo datę, albo NULL.
JJ
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
tomo
Posty: 6
Rejestracja: ndz lis 21, 2010 7:15 pm

Re: Kwerenda - 4 pola daty

Post autor: tomo »

Jan_J pisze:,,Równorzędne '' traktowanie wyników z różnych kolumn jest nienaturalne dla baz danych.
Jeżeli widzisz taką konieczność, to być może masz bardzo specyficzny problem, ale najprawdopodobniej wiąże się to z wadą projektu bazy danych.

Takie zapytanie da się zbudować w oparciu o podzapytania skorelowane, ale stopień jego komplikacji będzie niewspółmierny w stosunku do złożoności samego problemu.

Łatwiej będzie zbudować zapytanie z konstrukcją warunkową, np. casewhen(...), zwracającą albo datę, albo NULL.
Mozesz mi podpowiedziec jak mniej wiecej zrobic to uzywajac tego casewhen?
OpenOffice 2.4.1 + Debian 2.6.26
Jan_J
Posty: 4626
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Kwerenda - 4 pola daty

Post autor: Jan_J »

Jakoś tak:

Kod: Zaznacz cały

SELECT
casewhen(EXTRACT(MONTH FROM data1)=4, data1, NULL) as "Pole1",
-- itd
FROM twoja_tabela;
tylko jak sprawdzam, to się okazuje, że casewhen konwertuje zarówno datę, jak NULL na typ INTEGER. Datę to jeszcze-jeszcze, ale NULL-a konwertować: zgroza. Porządna baza tak nie śmie.

Workaround dla baz nie do końca poważnych: zamiast data1 w 2 argumencie casewhen wstaw reprezentujący ją tekst składany z jej komponentów, czyli EXTRACT( YEAR FROM data1 ) || '-' || EXTRACT( MONTH FROM data1 ) || '-' || EXTRACT( DAY FROM data1 ). Zamiast NULL wstaw pusty tekst, czyli ''.
JJ
LO (25.2|24.8) ∙ Python (3.12|3.10) ∙ Unicode 16 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ