[postgres] Jak =?iso-8859-2?Q?znale=BC=E6_liczby_kt=F3rych?= brakuje
sash668 - 20-10-2007 00:02
[postgres] Jak =?iso-8859-2?Q?znale=BC=E6_liczby_kt=F3rych?= brakuje
Witam,
Mam w tabeli: id integer, liczba integer
W 'liczba' mam liczby takie, że powinny być wszystkie od 1 do np. 3000 wiem że jakichś brakuje, jak sprawdzić jakich?
'id' ma się nijak do 'liczba' i może mieć różne dziwne wartości.
Lokalnie napisałem procedurę do jednokrotnego odpalenia i wszystko jasne, ale okazało się, tam gdzie ma to być sprawdzone nie ma plpgsql i zonk - dlatego musi to być sql.
Możliwe, że mam jakieś zaćmienie, ale po prostu brak pomysłów.
-- Best regards sash668 na dżimejl dot kom
Grzegorz Danowski - 21-10-2007 00:00
=?iso-8859-2?Q?Re:_=5Bpostgres=5D_Jak_znale=BC=E6_liczby_kt=F 3rych_brakuje?=
"sash668" <correct.email@in.sig> wrote in message news:1ay31epumzfvr.dlg@fnfufvkfvkrvtug.net... > Mam w tabeli: > id integer, > liczba integer > > W 'liczba' mam liczby takie, że powinny być wszystkie od 1 do np. 3000 > wiem > że jakichś brakuje, jak sprawdzić jakich? > > 'id' ma się nijak do 'liczba' i może mieć różne dziwne wartości. > > Lokalnie napisałem procedurę do jednokrotnego odpalenia i wszystko jasne, > ale okazało się, tam gdzie ma to być sprawdzone nie ma plpgsql i zonk - > dlatego musi to być sql. > > Możliwe, że mam jakieś zaćmienie, ale po prostu brak pomysłów.
Najszybszym rozwiązaniem będzie chyba dodanie pomocniczej tabeli (Numbers) z wszystkimi numerami od 1 do np. 10000, później wystarczy: Select OneNumber From Numbers As N Left Join TwojaTabelka As T On N.OneNumber = T.liczba Where OneNumber <= 3000 And T.liczba Is Null
Ewentualnie można kombinować z takimi zapytaniami, które zwrócą wszystkie liczby, które nie mają liczby większej (albo mniejszej) od nich i po dodaniu (odjęciu) jedynki będziesz miał pierwszą (ostatnią) liczbę z conajmniej pojedyńczej serii. Idąc tym tropem da się ustalić całe przedziały (początek i koniec). Ale dla dużych tabel będzie to mało wydajne.
Select liczba + 1 As PierwszaBrakujacaWPrzedziale From TwojaTabelka As T Where Exists( Select * -- ewentualnie wpisz 1 From TwojaTabelka As N Where N.liczba > T.liczba --czyli wszystkie większe liczby Having Min(liczba) - 1 > T.liczba --najmniejsza większa liczba jest większa o 1 )
Pozdrawiam Grzegorz
hubert depesz lubaczewski - 21-10-2007 00:00
Dnia 19.10.2007 sash668 <correct.email@in.sig> napisał/a: > W 'liczba' mam liczby takie, że powinny być wszystkie od 1 do np. 3000 wiem > że jakichś brakuje, jak sprawdzić jakich? > 'id' ma się nijak do 'liczba' i może mieć różne dziwne wartości.
http://www.depesz.com/index.php/2007...nerate_series/
depesz
-- quicksil1er: "postgres is excellent, but like any DB it requires a highly paid DBA. here's my CV!" :) http://www.depesz.com/ - blog dla ciebie (i moje CV)
A.L.E.C - 21-10-2007 00:00
sash668 pisze: > Witam, > > Mam w tabeli: > id integer, > liczba integer > > W 'liczba' mam liczby takie, że powinny być wszystkie od 1 do np. 3000 wiem > że jakichś brakuje, jak sprawdzić jakich?
nie napisałeś jaka wersja, ale generate_series() się do tego wspaniale nadaje http://www.depesz.com/index.php/2007...nerate_series/
-- Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252 LAN Management System Developer http://lms.org.pl
sash668 - 21-10-2007 00:00
hubert depesz lubaczewski <depesz@depesz.com> in <news:lmmou4-bkj.ln1@depesz.com> wrote:
> Dnia 19.10.2007 sash668 <correct.email@in.sig> napisał/a: >> W 'liczba' mam liczby takie, że powinny być wszystkie od 1 do np. 3000 wiem >> że jakichś brakuje, jak sprawdzić jakich? >> 'id' ma się nijak do 'liczba' i może mieć różne dziwne wartości. > http://www.depesz.com/index.php/2007...nerate_series/
Dzięki wszystkim za odp., dokładnie tego potrzebowałem :-).
Moje pomysły oscylowały w okolicach tabeli tymczasowej, tak jak proponował Grzegorz.
-- Best regards sash668 na dżimejl dot kom
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO
Czy zna (obsługuje) ktoś program Iso Draw ?
MYSQL - kodowanie w ISO-PL
strona plus baza w iso do utf-8
Kodowanie: z iso na utf
postgresql - int/int
postgresql Select count(*) czy raczej Select count(ID)
Postgres - replikcja master-master
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]
Wstawianie nowego wiersza w przypadku jego braku podczas SELECT w PostgreSQL
zanotowane.pldoc.pisz.plpdf.pisz.plponland.htw.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 |
|