there is always something to develop
How to find first and last occurrence of entry given kind
Finding first and last occurrence of record of some type is quite simple. We can do it on example of invoices. Let's assume that we have table containing the list of invoices
Invoices Table:
ID | CustomerNo | InvoiceNo | Date |
1 | 12 | 1 | 2009-01-07 |
2 | 15 | 2 | 2009-02-08 |
3 | 13 | 3 | 2009-03-09 |
4 | 18 | 4 | 2009-04-10 |
5 | 18 | 5 | 2009-05-11 |
6 | 12 | 6 | 2009-06-12 |
7 | 13 | 7 | 2009-07-13 |
Now is the time to find first invoice for each customer
SELECT select * from Invoices i where not exists(select ii.Id from Invoices ii where ii.CustomerNo=i.CustomerNo and ii.Id<i.Id ) order by i.CustomerNo
The query above, will give you result of:
ID | CustomerNo | InvoiceNo | Date |
1 | 12 | 1 | 2009-01-07 |
3 | 13 | 3 | 2009-03-09 |
2 | 15 | 2 | 2009-02-08 |
4 | 18 | 4 | 2009-04-10 |
Next try to find last invoice
select * from Invoices i where not exists(select ii.Id from Invoices ii where ii.CustomerNo=i.CustomerNo and ii.Id>i.Id ) order by i.CustomerNo
The query above, will give you result of:
ID | CustomerNo | InvoiceNo | Date |
6 | 12 | 6 | 2009-06-12 |
7 | 13 | 7 | 2009-07-13 |
2 | 15 | 2 | 2009-02-08 |
5 | 18 | 5 | 2009-05-11 |
Queries above assumes that all invoices were entered in correct date order, if it might not be right than maybe you should change the condition ii.Id<i.Id to ii.Date<i.Date and ii.Id>i.Id to ii.Date>i.Date
See also
Comments
"Look for opportunities...not guarantees. "
You are 18225 reader
since 1st April 2009
Yes | 9.9% |
18 |
No | 90.1% |
163 |