【问题标题】:Create filter for most recent date using combined columns使用组合列为最近日期创建过滤器
【发布时间】:2014-12-08 19:11:01
【问题描述】:

我在 Access 中创建了一个过滤应用程序,它引用了四个简单的表:

Employee: Emp_ID, FirstName, LastName 
Skill: Skill_ID, SkillName, SkillDescription, SkillGroup
Employee_Skill: Entry_ID, Emp_ID, Skill_ID, LevelofExperience, Dateupdated
SkillGroupName:SkillGroup_ID SkillGroupName`

基本上,这个数据库的想法是跟踪员工技能以及经验水平如何随着时间的推移而提高(或不提高!)。我面临的问题是我希望应用程序按最近更新的技能和员工组合进行过滤。我找到了允许我将两列用作不同实体的查询:

SELECT DISTINCT Emp_ID, Skill_ID FROM Employee_Skill
WHERE (SELECT MAX(DateUpdated)From Employee_Skill);

它本身就可以完美运行,但我不知道如何将它合并到我的主查询中,它只是将必要的列连接在一起,以获得更轻松的最终用户体验。它没有明显地显示Emp_IDSkill_ID。它也不在应用程序的 VBA 中。 (-1 = 包括所有历史记录;0 = 仅包括最新的。)

更新: 通过这样做,我已经能够通过我的主要查询选择 Employee 和 Skill 的不同组合:

SELECT 
 Employee.FirstName, 
 Employee.LastName, 
 Max(Employee_Skill.LevelOfExperience) AS LevelOfExperience, 
 Skill.SkillName, 
 Max(Employee_Skill.DateUpdated) AS DateUpdated, 
 Max(SkillGroup.SkillGroupName) AS SkillGroupName
FROM 
 SkillGroup INNER JOIN 
 (Skill INNER JOIN 
  (Employee INNER JOIN 
   Employee_Skill ON 
   Employee.Emp_ID = Employee_Skill.Emp_ID) ON 
  Skill.Skill_ID = Employee_Skill.Skill_ID) ON 
 SkillGroup.SkillGroup_ID = Skill.SkillGroup
WHERE 
 Employee.Active=True
GROUP BY 
 Employee.FirstName, 
 Employee.LastName, 
 Skill.SkillName
ORDER BY 
 Max(Employee_Skill.LevelOfExperience) DESC;

但是,我基于此查询构建的表单和报告只能选择查看最新版本。我真的希望有一个动态表单,可以根据需要消除约束。

【问题讨论】:

    标签: sql vba ms-access embedding


    【解决方案1】:

    不确定您在使用 Max(Employee_Skill.LevelOfExperience)Max(SkillGroup.SkillGroupName) 做什么,但我认为您需要坚持查询详细信息行,然后包含另一个标记 Max(Employee_Skill.DateUpdated) 过滤器的列,例如:

    SELECT 
     Employee.FirstName, 
     Employee.LastName, 
     Employee_Skill.LevelOfExperience, 
     Skill.SkillName, 
     Employee_Skill.DateUpdated, 
     SkillGroup.SkillGroupName,
     iif(max_dateUpdated=dateupdated,1,0) as is_max_DateUpdated
    FROM 
     SkillGroup INNER JOIN 
     (Skill INNER JOIN 
      (Employee INNER JOIN 
       Employee_Skill ON 
       Employee.Emp_ID = Employee_Skill.Emp_ID) ON 
      Skill.Skill_ID = Employee_Skill.Skill_ID) ON 
     SkillGroup.SkillGroup_ID = Skill.SkillGroup inner join
     (select  
       empID,
       max(dateupdated) as max_dateUpdated 
      from
       Employee_Skill
      group by 
       empID) mx on
      Employee.empID = mx.empID
    WHERE 
     Employee.Active=True
    

    【讨论】:

      猜你喜欢
      • 2019-03-23
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 2022-12-12
      • 1970-01-01
      • 2023-02-06
      • 2020-03-08
      相关资源
      最近更新 更多