![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 1 Dołączył: 16.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam. Chciałbym prosić was o pomoc. Myślę sobie już od kilku godzin i nie mam pomysłu jak to można rozwiązać. Otóż muszę napisać skrypt który znajdzie mi w bazie danych najniższą wolną liczbę spośród dostępnych w bazie danych. Wszelkie pomysły/sugestie są bardzo mile widziane.
Pozdrawiam. |
|
|
![]()
Post
#2
|
|
![]() Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
MIN(X)-1 ?
-------------------- Life's simple... You make choices and don't look back...
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 1 Dołączył: 16.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ta funkcja chyba odpada, bo zapomniałem wspomnieć, ale liczby mają być z pewnego zakresu np. 100-200 i mam znaleźć najniższą wolną liczbę, a nie o 1 mniejszą od najniższej z dodanych.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
A warunki WHERE oraz HAVING to od czego są? Ogranicz sobie nimi zakres poszukiwań i gotowe.
-------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 9.10.2007 Skąd: Morąg Ostrzeżenie: (0%) ![]() ![]() |
select min(col_liczb) as najmniejsza_wolna_liczba from tabela where col_liczb between 100 and 200 and col_licz_zabl = 0
col_liczb - kolumna z liczba col_licz_zabl - kolumna z flagą czy zablokowana czy nie cos takiego? select min(col_liczb) from tabela where col_licz_zabl = 0 having min(col_liczb)>100; Ten post edytował gutek84 4.03.2010, 15:01:39 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 45 Pomógł: 1 Dołączył: 16.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Można prosić o jakaś podpowiedź jak mniej więcej powinno wyglądać zapytanie z HAVING? Bo nie mogę sobie wyobrazić jak to HAVING może mi wyfiltrować najniższą liczbę która się nie powtarza.
@gutek84 Twoje zapytanie jakoś nie chce mi zadziałać, ogólnie to nie wiem po co jest ta kolumna col_licz_zabl, bo aktualnie w swojej bazie danych przechowuję tylko i wyłącznie liczby które są już zajęte, bo chyba nie ma sensu nadawania im dodatkowych flag, bo co to da ;> @ EDIT Nie wiem czy mnie dobrze rozumiecie, ale chodzi mi o to że mam określony przez aplikację zakres wartości: od 20000 do 50000 Liczba która jest poszukiwana jest to najniższa wartość z powyższego zakresu, która nie istnieje w bazie danych. Proszę o jakąś konkretną radę, bo siedzę już nad tym pół dnia i efektów nadal nie widać. Ten post edytował adrix88 4.03.2010, 16:05:11 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Sprawdź ten artykuł:
http://www.xaprb.com/blog/2005/12/06/find-...uence-with-sql/ Opisane w nim rozwiązania najszybsze nie są (uroki SQL-a przy pracy z nieistniejącymi danymi, mimo iż algorytmicznie to można prosto zrobić), ale działają i zwracają wszystkie luki numeracji. Ty musisz po prostu dodać ograniczenie na zakres, pobrać pierwszą lukę i gotowe. PS. A na przyszłość to pisz takie rzeczy w pierwszym poście, a nie po długiej dyskusji, bo faktycznie nie do końca się rozumieliśmy ![]() Ten post edytował Zyx 4.03.2010, 19:00:59 -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Cytat najniższa wartość z powyższego zakresu, która nie istnieje w bazie danych
Ja bym pobrał wszystkie liczby i sprawdzał, czy bieżąca minus poprzednia równa się jeden, jeśli nie to mamy wolne miejsce, które wynosi poprzednia liczba plus jeden, oczywiście wtedy przerywamy pętlę while. Pozostaje przetestować wydajność i zastosować jedno z rozwiązań. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Jedyne w miarę sensowne działanie to stworzenie fikcyjnej tabeli o wartościach z zakresu A do B z założonym indexem (nazwijmy ją fiction) na jedyna kolumnę w nim o nazwie przypuśćmy "i" i zapytanie
Kiedyś na zajęciach wiem, że mówiła kobitka o fikcyjnych tabelach w SQL do jakich się można odwoływać choćby w przypadku jakichś działań matematycznych, ale to była ciekawostka i teraz nazwy tej tabeli nie kojarzę. Możliwe, że dzięki niej można by było w locie stworzyć taki zakres od A do B. Żebym to tylko ja pamiętał jak ona się nazywała ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 05:09 |