Avatar billede lbaad Nybegynder
26. november 2004 - 13:07 Der er 11 kommentarer og
2 løsninger

Hvordan findes nummerrækkefølge??

Hejsa

Er der noget der ved hvordan man finder en nummerrækkefølge i en tabel??
Det jeg skal finde er, at når der er 10 numre der er fortløbne, så skal de vises.

Hilsen Lars
Avatar billede teepee Nybegynder
26. november 2004 - 14:14 #1
Skal det være SQL eller pl/sql?
Avatar billede lbaad Nybegynder
26. november 2004 - 14:40 #2
det der nu er nemmest.
Jeg skal bare kunne se resultatet
Avatar billede olet Nybegynder
02. december 2004 - 11:54 #3
Givet en tabel TEST med én kolonne NO, som indeholder de potentielt fortløbende numre, så kan du bruge dette statement:

select 'true' from dual
where 10 <= (select count(no) from test connect by no=prior no+1 start with no=1)

Returner nul rækker, hvis der ikke findes mindst 10 fortløbende numre NO i tabellen fra og med NO=1) ellers teksten 'true'
Avatar billede olet Nybegynder
02. december 2004 - 11:55 #4
Og selve subselect'en giver dig numrene, hvis du skal bruge dem til noget
Avatar billede lbaad Nybegynder
02. december 2004 - 13:09 #5
Det prøver jeg lige, og så vender jeg tilbage om det har virket efter planen. Takker
Avatar billede lbaad Nybegynder
02. december 2004 - 14:11 #6
Hvis jeg nu gerne vil have en where-clause på, hvor skal den så stå henne???
Avatar billede lbaad Nybegynder
02. december 2004 - 14:28 #7
og en anden ting. Hvis det er en varchar tabel, hvordan skal det så gøres??
Er dette her den rigtige måde??
connect by no=prior (to_number(no))+1 start with (to_number(no))=1
Avatar billede olet Nybegynder
02. december 2004 - 15:24 #8
Det kommer an på om din where clause skal gælde for startpunkt (start with) og/eller for hver række i resultatet, dvs. de fortløbende numre.

fx

select 'true' from dual
where 10 <= (select count(no) from test connect by no=prior no+1 start with no=1 and enstartkolonne = 'starther')

eller

select 'true' from dual
where 10 <= (select count(no) from test where entestkolonne = 'aktiv' connect by no=prior no+1 start with no=1)

hvis din nummer-kolonne er varchar (hvorfor er den det, hvis den indeholder et tal?)
så kan du godt bruge to_number

connect by to_number(no)=prior to_number(no)+1 start with to_number(no)=1

men så vil Oracle ikke kunne bruge et evt. index på denne kolonne. Du kan så bruge et function-based index, men alt andet lige, så bør et numerisk felt ligge i en numerisk kolonne.
Avatar billede olet Nybegynder
02. december 2004 - 15:37 #9
Generelt omkring Oracle spm, så check http://asktom.oracle.com/

Super site med svar på stort set alt (omkring Oracle)
Avatar billede lbaad Nybegynder
03. december 2004 - 14:07 #10
Nu har jeg prøvet at køre det, men jeg får intet resultat. Det kan være, at jeg bare er utålmodig, men nu har scriptet kørt i ca. 2-3 timer, og der er ikke kommet noget ud af det endnu. Der er ca. 450000 rækker i tabellen, så det er jo ikke overvældende.

Desværre kan jeg ikke svare dig, på hvorfor kolonnen er en varchar, men jeg tror, at det er dem, som har lavet min database, som har lavet en fejl.
Avatar billede lbaad Nybegynder
03. december 2004 - 14:14 #11
Nu er der kommet et resultat, og det er bare "true".

Her er statementet, som jeg kører:
select 'true' from dual
where 10 <= (select count(phonenumber) from phonenumber
where state = 1 and category = 1025
connect by to_number(phonenumber)= prior to_number(phonenumber)+1
start with to_number(phonenumber) = 50500000)
Avatar billede olet Nybegynder
06. december 2004 - 13:16 #12
ja, men det er jo også hvad du har bedt om, "true" hvis der findes nummerrækkefølger med mere end 10 numre i.

Jeg lyser på vejen, men du kører ....
Avatar billede lbaad Nybegynder
13. december 2004 - 11:33 #13
nu var det jo ligesom sådan , at jeg også gerne ville have vist disse numre :-)
jeg fandt selv en løsning nu:

select substr(phonenumber,1,7),count (*) numre
from cbb_phonenumber where state = 1 and phonenumber like '505%'
group by substr(phonenumber,1,7)

Så har jeg bare taget de ca 63 numre, som der er 10 stk numre i. Takker for inputs.
Olet - du får 15 points, da du jo har brugt tid på det, og har hjulpet mig i den rigtige retning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester