Advice on database design / SQL for retrieving data with chronological order

Posted by Remnant on Stack Overflow See other posts from Stack Overflow or by Remnant
Published on 2010-03-14T17:51:11Z Indexed on 2010/03/14 17:55 UTC
Read the original article Hit count: 865

Filed under:
|
|

I am creating a database that will help keep track of which employees have been on a certain training course. I would like to get some guidance on the best way to design the database.

Specifically, each employee must attend the training course each year and my database needs to keep a history of all the dates on which they have attend the course in the past.

The end user will use the software as a planning tool to help them book future course dates for employees. When they select a given employee they will see:

  • (a) Last attendance date
  • (b) Projected future attendance date(i.e. last attendance date + 1 calendar year)

In terms of my database, any given employee may have multiple past course attendance dates:

EmpName          AttandanceDate

Joe Bloggs             1st Jan 2007
Joe Bloggs           4th Jan 2008
Joe Bloggs           3rd Jan 2009
Joe Bloggs           8th Jan 2010

My question is what is the best way to set up the database to make it easy to retrieve the most recent course attendance date? In the example above, the most recent would be 8th Jan 2010.

Is there a good way to use SQL to sort by date and pick the MAX date?

My other idea was to add a column called ‘MostRecent’ and just set this to TRUE.

EmpName    AttandanceDate         MostRecent
Joe Bloggs  1st Jan 2007           False
Joe Bloggs  4th Jan 2008           False
Joe Bloggs  3rd Jan 2009           False
Joe Bloggs  8th Jan 2010           True

I wondered if this would simplify the SQL i.e.

SELECT Joe Bloggs WHERE MostRecent = ‘TRUE’

Also, when the user updates a given employee’s attendance record (i.e. with latest attendance date) I could use SQL to:

  1. Search for the employee and set the MostRecent value to FALSE
  2. Add a new record with MostRecent set to TRUE?

Would anybody recommended either method over the other? Or do you have a completely different way of solving this problem?

© Stack Overflow or respective owner

Related posts about database-design

Related posts about sql