Fun with SQL - Mailing list pgsql-sql

From Josh Berkus
Subject Fun with SQL
Date
Msg-id web-819041@davinci.ethosmedia.com
Whole thread Raw
List pgsql-sql
Folks,

I just made some fun and interesting use of 'tricky" SQL I thought I
 would share, as it gives an example of both clever SQL and function
 usage.

THE PROBLEM:  One of my clients is reporting skipped invoice numbers in
 their database.  At a glance, I can't find any.  While the client uses
 numerical invoice numbers, invoice_no is a VARCHAR field to accomodate
 other schemes.  How can I check for ALL skipped invoice numbers in the
 database?  Searching for data that is *not* there, without a reference
 list to compare, is a challenge.

THE ANSWER: Look for any invoice number that is not succeeded by the
 invoice number which is its immediate numerical successor.  I will
 also have to do some type conversions to do math on a VARCHAR field.

THE QUERY:
SELECT (to_number(invoice_no, '99999')::INT4 + 1::INT4) as skipped
FROM invoices
WHERE ltrim(to_char((to_number(invoice_no, '99999')::INT4 + 1::INT4),
 '99999'))
  NOT IN (SELECT invoice_no FROM invoices);

WHAT I GOT:
skipped
-------
  10519
  10839

Note that 10839 is the *next* invoice number to be generated, and as
 such, not skipped.

WHAT I TOLD THE CLIENT:  "Hmmm, I can only see one skipped invoice in
 the last 350 you've run.  This does not seem to be a chronic problem."

-Josh Berkus

______AGLIO DATABASE SOLUTIONS___________________________
                                       Josh Berkus

pgsql-sql by date:

Previous
From: "PG Explorer"
Date:
Subject: Re: simple problem
Next
From: Jie Liang
Date:
Subject: Re: where not exists