From: | "Josh Berkus" <josh(at)agliodbs(dot)com> |
---|---|
To: | pgsql-novice(at)postgresql(dot)org, pgsql-sql(at)postgresql(dot)org |
Subject: | Fun with SQL |
Date: | 2002-03-06 20:19:03 |
Message-ID: | web-819041@davinci.ethosmedia.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-novice 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
From | Date | Subject | |
---|---|---|---|
Next Message | Faudzy Sulaiman | 2002-03-07 03:49:41 | Postmaster with -i |
Previous Message | Josh Berkus | 2002-03-06 20:00:39 | Re: pg equivalent to MS SQL exec command |
From | Date | Subject | |
---|---|---|---|
Next Message | Josh Berkus | 2002-03-06 20:25:30 | Re: where not exists |
Previous Message | PG Explorer | 2002-03-06 20:13:45 | Re: simple problem |