Jak wyciągnąć dane z najstarszą datą od?
SELECT MIN( data_od ) from [ nazwa tablei ] group by [ kryterium
grupowania ]
Do tego w�a�nie s�u�y klauzula group by
nie rozumiem?
ja robię zapytanie powiązane
select nazwisko, data_od from nazwa_tabeli where data_od(select
min(data_od) from nazwa_tabeli)
tylko nie żadnych wyników nie mam :(
> select nazwisko, data_od from nazwa_tabeli where data_od(select
> min(data_od) from nazwa_tabeli)
select nazwisko, imie, min(data_od) as data_od
from nazwa_tabeli
group by nazwisko, imie;
--
PaSkol
ok działa tylko w wyniku mam 3 rekordy dla nazwiska kowalski, a chce
uzyskać dla nazwiska 1 rekord z najstarszą datą
działa tylko jak dodam kod_gminy w selekcie to do group by też muszę
dodać i przez to mam 3 rekordy, jak mam zmodyfikować selecta żeby nie
sortował kod_gminy po group by?
>> ok dzia�a tylko w wyniku mam 3 rekordy dla nazwiska kowalski, a chce
>> uzyskaďż˝ dla nazwiska 1 rekord z najstarszďż˝ datďż˝
>
> dzia�a tylko jak dodam kod_gminy w selekcie to do group by te� musz�
> doda� i przez to mam 3 rekordy, jak mam zmodyfikowa� selecta �eby nie
> sortowaďż˝ kod_gminy po group by?
Musisz by� bardziej precyzyjny. W�a�ciwie nie wiem o co Ci chodzi, wi�c
proponujďż˝ tak:
select NT.*
from nazwa_tabeli NT
inner join (
select nazwisko as n, min(data_od) d
from nazwa_tabeli
group by nazwisko
) Q on n = nazwisko and d = data_od;
Czyli wybrane zostan� wszystkie rekordy, kt�re dla niepowtarzalnego
nazwiska (ale juďż˝ nie imienia) posiadajďż˝ najstarszďż˝ datďż˝. Nie wiem, jaki
system baz danych wi�c niekoniecznie musi zadzia�a�.
--
PaSkol
dzięki ale nie działa mam bazę informix, a nie można zrobić za pomocą
zapytań powiązanych bez łączenia?
Mo�e da si� tak:
select NT.*
from nazwa_tabeli NT, (
select nazwisko as n, min(data_od) d
from nazwa_tabeli
group by nazwisko
) Q
where n = nazwisko and d = data_od;
--
PaSkol
http://www.dbf.pl/faq/index.html
punkt 0.3
depesz
--
Linkedin: http://www.linkedin.com/in/depesz / blog: http://www.depesz.com/
jid/gtalk: dep...@depesz.com / aim:depeszhdl / skype:depesz_hdl / gg:6749007
działa ale wynik jest nie prawidłowy, jeszcze raz w tabeli mam takie
dane
nazwisko kod_gminy data_od
kowalski 1863011 1/10/2009
kowalski 1818011 4/03/2001
kowalski 1819013 5/05/2010
kowalski1 1853013 1/10/2009
kowalski1 1843011 1/10/2008
chce żebym w wyniku dostał
kowalski 1818011 4/03/2001
kowalski1 1843011 1/10/2008
czyli z najstarszą tylko datą
Jaka baza (i wersja)?
I pewnie dostaniesz [SQL]. ;)
Może by tak usunąć pierwszy wiersz z tej tabelki?
--
P.M.
Używam bazy IBM Informix v. 9.4 TC9
chce wyciągnąć nazwisko, kod gminy nic więcej bez imienia, a kryterium
wyszukiwania to najstarsza data
co chcesz wiedzieć więcej?
kłania się takie zwierzę, które nazywa się HAVING ;)
z having próbuje i wyskakuje że bład
seleckt nazwisko, kodgminy, min(data_od) as data from mojatabela where
having nazwisko, kodgminy
having to warto�� boolean'owa
przyjmuje warto�� PRAWDA albo FA�SZ
no to w końcu jak ma wyglądać sql
>> having to warto boolean'owa
>> przyjmuje warto PRAWDA albo FA SZ
>
> no to w ko�cu jak ma wygl�da� sql
przeczytaj w manualu do swojej bazy lub ka�dym innym do SQLa. Nie
zadawaj pyta� na kt�re mo�na �atwo znale�� odpowied�
Wydaje mi si�, �e HAVING ci nie pomo�e. Do takich rzeczy w postgresie
u�ywa si� sk�adni DISTINCT ON, nie wiem jak w innych bazach.
--
Aleksander 'A.L.E.C' Machniak
LAN Management System Developer [http://lms.org.pl]
Roundcube Webmail Developer [http://roundcube.net]
---------------------------------------------------
PGP: 19359DC1 @@ GG: 2275252 @@ WWW: http://alec.pl
jeśli cokolwiek.
> Może by tak usunąć pierwszy wiersz z tej tabelki?
:)
ale dzięki temu można przynajmniej ustawić sobie regułkę odrzucającą
[SQL] w killfileu :)
> On 09.02.2011 14:38, tomi613 wrote:
>
>>> having to warto boolean'owa
>>> przyjmuje warto PRAWDA albo FA SZ
>>
>> no to w końcu jak ma wyglądać sql
>
> przeczytaj w manualu do swojej bazy lub każdym innym do SQLa. Nie
> zadawaj pytań na które można łatwo znaleźć odpowiedź
>
> Wydaje mi się, że HAVING ci nie pomoże. Do takich rzeczy w postgresie
> używa się składni DISTINCT ON, nie wiem jak w innych bazach.
Dodam (dla Tomi613), ze:
Essentially what the DISTINCT keyword does is removing the duplicates from
the result set returned by your SELECT SQL statement.
Nie bedziesz mial duplikatow dla gmin.
wiem że to banalnie proste ale z DISTINCT nie działa, dalej uzyskuję
3 rekordy, i nie wiem co dalej, ktoś pomoże
próbuje proste zagnieżdżone zapytanie zrobić i wydaje mi że informix
tego nie obsługuje
select kodgminy from mojatabela where nazwisko=(select naziwsko from
moja tabela where nazwisko='kowalski')
mojatabela dotyczy tej samej tabeli, nawet to nie przejdzie, wiem że
to można zrobić w jednym zapytaniu ale nie chciałem sprawdzić
działanie zagnieżdżonych zapytań
jednak obsługuje zagnieżdżone zapytania select dalej nie wiem jak
wyciągnąć najniższą wartość z tabeli
ok działa select wygląda tak ale na okreśłone nazwisko
select nazwisko, kodgmina, dataod from moja_tabela where
nazwisko='kowalski' and dataod IN(select min(dataod) from kinadrza
where nazwisko='kowalski')
Może ktoś pomóc żeby wybrać wszystkie nazwiska z nastarszą data ?
>ok działa select wygląda tak ale na okreśłone nazwisko
>select nazwisko, kodgmina, dataod from moja_tabela where
>nazwisko='kowalski' and dataod IN(select min(dataod) from kinadrza
>where nazwisko='kowalski')
Może tak?
select a.nazwisko,a.dat_od,b.kodgmina
from
(
select nazwisko,min(dataod) dat_od
from moja_tabela
group by nazwisko
) a, moja_tabela b
where b.nazwisko=a.nazwisko
and b.dataod=a.dat_od
MC
niestety ale nie dostaje błąd
> niestety ale nie dostaje błąd
Ach, gdybyś jeszcze podawał jego treść. A tak pomoc Tobie to jak
łowienie ryb poprzez walenie kijem w wodę.
--
PaSkol
proszę bardzo, ale jak byś skrolem przewinął do gury to byś wiedział
select a.nazwisko,a.dat_od,b.kodgmina
from
(
select nazwisko,min(dataod) dat_od
from moja_tabela
group by nazwisko
) a, moja_tabela b
where b.nazwisko=a.nazwisko
and b.dataod=a.dat_od
baza informix v. 9.4
O ja Cie pie....e. Nie dziwi� si� �e Ci nikt nie jest w stanie pom�c.
TRE�� B��DU!!!
--
pozdrawiam,
Przemys�aw Osma�ski, SoftSYSTEM
www.soft-system.pl
www.kochamjedzenie.pl - portal dla ludzi kt�rzy kochaj� jedzenie
Widzę, że ostro się męczycie, a problem trywialny.
select id_pacjenta, data
from z_bd z
where
data = (select min(data) from z_bd where id_pacjenta = z.id_pacjenta)
group by id_pacjenta, data
lub
select distinct id_pacjenta, data
from z_bd z
where
data = (select min(data) from z_bd where id_pacjenta = z.id_pacjenta)
Składnia Oracle, sprawdzone na "żywych" danych.
Wewnętrzny select szuka najmniejszej daty dla każdego człowieka.
Klauzula distinct lub group by potrzebne w sytuacji jeśli dla danej
osoby mogą być dwa rekordy z daną datą.
--
maryjan
"Każdymu świyci tak dłógo gwiozda na niebie
Aż wygaśniyncio przidzie jeji czas"
Blaf (http://www.blaf.cz/index.php?body=texty&cas=1002191865)
dzięki wielkie działa, wiem że problem trywialny ale na zaliczenie
trzeba ćwiczyć
> dzięki wielkie działa,
[...]
Spoko. To z 'distinct' jest lepsze, niż to z grupowaniem.
--
maryjan
> dzi�ki wielkie dzia�a, wiem �e problem trywialny ale na zaliczenie
> trzeba �wiczy�
albo ci si� tylko tak wydaje. Jak wstawi�e� kolumn� kodgmina w te zapytania?
Andrzej.
--
Wys�ano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
działa na 100%
select wygląda tak
SELECT DISTINCT nazwisko, kodgminy, dataod FROM mojatabela
a.mojatabela WHERE dataod IN (select min(dataod) from mojatabela where
nazwisko=a.nazwisko)
> wydaje mi si� �e select po form nie mo�e by�
To Ci si� �le wydaje...
Wr�� do czytania dokumentacji i doczytaj o derived tables, a potem wr��
na grupďż˝.
PS - po co pomagaďż˝ komuďż˝, kto:
1) Jest zainteresowany tylko dzia�aj�cym zapytaniem
2) Nie jest zainteresowany poszerzeniem swojej wiedzy (tak wiem, pisz�c
o wiedzy przesadzi�em w spos�b absolutnie niewyw�aszczalny)
3) Nie czyta tego co siďż˝ do niego pisze, uruchamia zapytania
4) Nie jest w �aden spos�b zainteresowany znalezieniem rozwi�zania na
w�asn� r�k�
5) I jeszcze m�drkuje...
--
wloochacz
uruchom taki kod dla tabeli z 10 000 000 rekordow i podaj czas wykonania ;)
--
Mateo
przecież nie pytałem się o wydajność tylko o składnie, a co do
zaliczenia to na własny użytek robię, i proszę was resztę uwag
wsadzcie sobie w 4 literki
pozdrawiam
> dzia�a na 100%
> select wygl�da tak
> SELECT DISTINCT nazwisko, kodgminy, dataod FROM mojatabela
> a.mojatabela WHERE dataod IN (select min(dataod) from mojatabela where
> nazwisko=a.nazwisko)
Dwie uwagi:
1. Nazwisko, ani nazwisko i imiďż˝ nie sďż˝ danymi unikalnymi, powinieneďż˝
raczej mieďż˝ tutaj jakieďż˝ ID osoby
2. Musisz zadba� aby kombinacja osoba+dataod by�a unikalna, bo je�li nie
b�dzie to zapytanie mo�e dawa� wyniki kt�rych nie oczekiwa�e�.
dzięki za info
możesz mi powiedzieć dlaczego takie zapytanie z podaniem nazwy tablicy
nie chce się wykonać?
SELECT DISTINCT mojatabela.nazwisko, mojatabela.kodgminy,
mojatabela.dataod FROM mojatabela
a.mojatabela WHERE mojatabela.dataod IN (select min(mojatabela.dataod)
from mojatabela where
nazwisko=a.nazwisko)
> możesz mi powiedzieć dlaczego takie zapytanie z podaniem nazwy tablicy
> nie chce się wykonać?
> SELECT DISTINCT mojatabela.nazwisko, mojatabela.kodgminy,
> mojatabela.dataod FROM mojatabela
> a.mojatabela WHERE mojatabela.dataod IN (select min(mojatabela.dataod)
> from mojatabela where
> nazwisko=a.nazwisko)
źle stosujesz aliasy, zobacz czy nie lepiej tak
SELECT DISTINCT a.nazwisko, a.kodgminy, a.dataod
FROM mojatabela a
WHERE a.dataod IN (
SELECT min(dataod)
FROM mojatabela
WHERE nazwisko = a.nazwisko
)
Jak potrzebowales pomocy, to byles grzeczny.
Jak juz otrzymales pomoc, to jestes chamski!
dzięki,
ostatnie pytanie czy wogóle można zrobić kolejne podzapytanie że np.
jeśli data jest starsza od roku to zamień datęod ale nie w bazie tylko
w wyniku zapytania, jest takie coś możliwe?
select case ( POLE )
when 'kiedy coś tam ' THEN 'wyświetl coś tam '
end case .....
select case
> prosz� bardzo, ale jak by� skrolem przewin�� do gury to by� wiedzia�
Jakim ku..a skrolem? I do jakiej "gury" - PaSkol prosi� o *TRE��
KOMUNIKATU B��DU*, a nie o wersj� bazy danych.
Skoro pojawia si� b��d podczas pr�by wykonania zapytania, to nawet taki
pajac jak ty powinien si� zorientowa�, �e podanie tre�ci tego komunikatu
mo�e pom�c zorientowa� si� dlaczego to na twojej bazie danych nie dzia�a.
Np. Czy baza nie obs�uguje jakiej� konstrukcji czy po prostu zrobi�e� z
siebie totalnego idiot� i �le skopiowa�e� tekst zapytania - na co
osobi�cie stawiam.
Teraz rozumiesz o co chodzi?
PS.
Chce Wam siďż˝ jeszcze z nim pisaďż˝?
PO CO?
--
wloochacz
zly tok myslenia - potem takiemu tlumacz w zyciu ze musi wystawic klucz
bo inaczej moze sobie dane wsadzic .... w buty
--
Mateo