I beleive the below solution will not detect rows missing from the very
top of the table,
try this...
 
select ifnull((select max(a.test_id) +1
        from tests a
        where a.test_id<b.test_id),1) as 'from'
      ,b.test_id -1                     as 'to'
from tests b 
     left outer join tests x
        on x.test_id=b.test_id -1
where x.test_id is NULL and b.test_id>1
order by 1 

Ed

________________________________

From: Peter Brawley [mailto:[EMAIL PROTECTED] 
Sent: Thursday, August 18, 2005 10:18 AM
To: [EMAIL PROTECTED]
Cc: Scott Hamm; 'Mysql '
Subject: Re: Deleted rows


Scott, Shawn,

>The OP would like to detect that 4,5,6, and 7 are missing from the 
>sequence. Your query would have only found that 7 was missing.

Right! For sequences longer than 1 you need something like...

SELECT 
  a.id+1 AS 'Missing From', 
  MIN(b.id)-1 AS 'To'
FROM test AS a, test AS b
WHERE a.id < b.id
GROUP BY a.id
HAVING a.id + 1 < MIN(b.id)
ORDER BY 1;

PB

-----

[EMAIL PROTECTED] wrote: 


        Peter, 
        
        Your query may work for data with single-row gaps (like his
example data) but it will not work if the sequence skips more than one
number. 
        
        Look at this sequence: 1,2,3,8,9,10 
        
        The OP would like to detect that 4,5,6, and 7 are missing from
the sequence. Your query would have only found that 7 was missing. 
        
        Nice try, but sorry. It just won't meet the need. 
        
        Shawn Green
        Database Administrator
        Unimin Corporation - Spruce Pine 
        
        Peter Brawley <[EMAIL PROTECTED]>
<mailto:[EMAIL PROTECTED]>  wrote on 08/18/2005 10:56:34 AM:
        
        > Scott,
        > 
        > >How do I execute a query that shows missing ID's like so:
        > 
        > SELECT id AS i 
        > FROM tbl
        > WHERE i <> 1 AND NOT EXISTS( 
        >   SELECT id FROM tbl WHERE id = i - 1
        > );
        > 
        > PB
        > 
        > -----
        > 
        > Scott Hamm wrote: 
        > If I got a table as follows:
        > 
        > 
        > ID foo
        > 1 12345
        > 2 12346
        > 4 12348
        > 6 12349
        > 7 12388
        > 9 12390
        > How do I execute a query that shows missing ID's like so:
        > 
        > 3
        > 5
        > 8
        > 
        > I wouldn't expect for it to show deleted data that was
deleted, just show 
        > the "skipped" ID's.
        > 
        > That way I determine if operator deleted too much (cheating at
QC)
        > 
        > Is it possible?
        >   
        > 
        > 
        > No virus found in this incoming message.
        > Checked by AVG Anti-Virus.
        > Version: 7.0.338 / Virus Database: 267.10.12/75 - Release
Date: 8/17/2005
        >   No virus found in this outgoing message.
        > Checked by AVG Anti-Virus.
        > Version: 7.0.338 / Virus Database: 267.10.12/75 - Release
Date: 8/17/2005
        > 
        > 
        > -- 
        > MySQL General Mailing List
        > For list archives: http://lists.mysql.com/mysql
        > To unsubscribe:
http://lists.mysql.com/[EMAIL PROTECTED] 
        
________________________________


        No virus found in this incoming message.
        Checked by AVG Anti-Virus.
        Version: 7.0.338 / Virus Database: 267.10.12/75 - Release Date:
8/17/2005
          

Reply via email to