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: 1047
        
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:
- Search for the employee and set the MostRecent value to FALSE
 - 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