Solved

Find the missing number

Posted on 2011-03-16
7
920 Views
Last Modified: 2012-05-11
Being unexperienced in SQL, I have problem with this query:

This is my database table ("table_number"):

id      Number      Name                        
25      1      James
57      3      Doris
78      9      Dave
89      7      Chuck
126      2      Bertie
153      10      Marion
198      5      Veronica
234      6      Allen

If I order it by "Number" it will print:

id      Number      Name
                        
25      1      James
126      2      Bertie
57      3      Doris
198      5      Veronica
234      6      Allen
89      7      Chuck
78      9      Dave
153      10      Marion

Looking at he "Number" series, there are two numbers missing; 4 and 8. I want, in the first place, to find the lowest of the two, i e number 4 in this example.

I have tried to make a query like $SQL = "SELECT * FROM table_numbers WHERE ..." but I don't know how to continue. Please, Gurus of SQL, help me out. If it isn't to much to ask, please comment or explain briefly on the query you suggest. Thanks.
0
Comment
Question by:lericson
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
  • 2
  • +1
7 Comments
 
LVL 39

Expert Comment

by:Aaron Tomosky
ID: 35152955
Does it always start at 1? If there is no 1 is that considered a missing number?
0
 
LVL 16

Expert Comment

by:sjklein42
ID: 35152959
This is an interesting question.  Here is an extended discussion along with several proposed solutions, none of which are perfect:

http://www.xaprb.com/blog/2005/12/06/find-missing-numbers-in-a-sequence-with-sql/

Do not feel bad.  Even the SQL gurus are stumped by this one.
0
 
LVL 39

Expert Comment

by:Aaron Tomosky
ID: 35152982
Therefore I'm trying to define this a little better. For example If what we are really doing is looking for the lowest missing integer starting at 1, that's much easier than looking for a gap in a generic sequence. By adding a rowcount column or a not in (create integer list here) it can be solved much simpler.
0
The Ultimate Checklist to Optimize Your Website

Websites are getting bigger and complicated by the day. Video, images, custom fonts are all great for showcasing your product/service. But the price to pay in terms of reduced page load times and ultimately, decreased sales, can lead to some difficult decisions about what to cut.

 
LVL 41

Expert Comment

by:Sharath
ID: 35152984
try this/
SELECT MIN(rownum) min_Missing_Number 
  FROM (  SELECT id, 
                 Number, 
                 Name, 
                 @rownum := @rownum + 1 AS rownum 
            FROM table_number, 
                 (SELECT @rownum := 0) r 
        ORDER BY Number) t1 
 WHERE Number <> rownum;

Open in new window

0
 
LVL 16

Expert Comment

by:sjklein42
ID: 35152985
Here are a couple of people who think they found good solutions to this query:

http://bytes.com/topic/sql-server/answers/511668-query-find-missing-number

select (a.col1 + 1)
from tab1 a
where not exists
(select 1
from tab1 b
where b.col1 = (a.col1 + 1))
and a.col1 not in
(select max(c.col1)
from tab1 c)
order by 1

Open in new window

0
 
LVL 41

Accepted Solution

by:
Sharath earned 500 total points
ID: 35152991
Tested on your sample.
select * from table_number;
+------+--------+----------+
| id   | Number | Name     |
+------+--------+----------+
|   25 |      1 | James    |
|   57 |      3 | Doris    |
|   78 |      9 | Dave     |
|   89 |      7 | Chuck    |
|  126 |      2 | Bertie   |
|  153 |     10 | Marion   |
|  198 |      5 | Veronica |
|  234 |      6 | Allen    |
+------+--------+----------+
8 rows in set (0.00 sec)

SELECT MIN(rownum) min_Missing_Number 
  FROM (  SELECT id, 
                 Number, 
                 Name, 
                 @rownum := @rownum + 1 AS rownum 
            FROM table_number, 
                 (SELECT @rownum := 0) r 
        ORDER BY Number) t1 
 WHERE Number <> rownum;
+--------------------+
| min_Missing_Number |
+--------------------+
|                  4 |
+--------------------+
1 row in set (0.00 sec)

Open in new window

0
 

Author Closing Comment

by:lericson
ID: 35153110
Superb. Thanks.
0

Featured Post

Instantly Create Instructional Tutorials

Contextual Guidance at the moment of need helps your employees adopt to new software or processes instantly. Boost knowledge retention and employee engagement step-by-step with one easy solution.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article discusses how to create an extensible mechanism for linked drop downs.
This article shows the steps required to install WordPress on Azure. Web Apps, Mobile Apps, API Apps, or Functions, in Azure all these run in an App Service plan. WordPress is no exception and requires an App Service Plan and Database to install
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question