Hi to all u SQL Gurus out there!
 
could someone help me with my query please?
 
 I have the following tables
 
Skill Attempt:        //holds all attempts at "skill" even failed and disqualified (for licences)
SkillAttemptID        //eg licence attempts etc
PersonID
AttemptDate
ValidTo
ProviderDI
SkillID
Result
Ref
Comments
 
Skill:                    //holds names of skills and time valid
SkillID
Name
TimeValid
CompanyID
 
SkillNeeded:            //holds what skills are required for what job
SkillNeededID
EmploymentID
TimePeriodID
SkillID
 
Employment:        //job names
EmploymentID
Name
 
TimePeriod:            //time periods in weeks for select box
TimePeriodID
Weeks
 
PersonEmployment:        //who does what jobs
PersonEmploymentID
CommenceDate
PersonID
 
PErson:
personid
name
etc
 
In the SkillNeeded table, some skills are required within a certain period of beginning a job.  these hold a foreign key linking to timeperiod
if the skill is a prerequisite, the value will be 0
if there is no time limit, the skillneeded.timeperiodid will be null - hence the left join
 
i have the following sql to show what skills a person requires that they do not yet have:
 
select distinct pe.commencedate, sn.skillid, s.name, sn.timeperiodid, tp.weeks
 from personemployment pe
join skillneeded sn on sn.employmentid = pe.employmentid
left join timeperiod tp on tp.timeperiodid = sn.timeperiodid
join skill s on s.skillid = sn.skillid
where pe.personid = 4
and sn.skillid not in
(select skillid from skillattempt where (personid = 4 and skillid = sn.skillid
and result = 'P' and (validto is null or validto > '02/11/2003')))
 
Some skills are required in more than one job.  If this person has both those jobs and doesnt have that skill, then the query returns the skill for as many times as it is needed.
 
What i really want, is for the skill itsself to be only returned once, with the earliest timeperiod.  Is this possible in SQL or do i need to frig with code? (distinct isnt working with all my joins)
 
 
 
Tracey
Software Developer / Web Master
Logis
[EMAIL PROTECTED]
(025) 213-1065

Reply via email to