首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL代码生成问题、分组依据和聚合

SQL代码生成问题、分组依据和聚合
EN

Stack Overflow用户
提问于 2011-05-26 02:29:41
回答 1查看 152关注 0票数 1

我正在开发一个web应用程序,它允许用户针对员工数据库设计即席查询。查询是在一个基于AJAX web的界面中设计的,在那里用户指定了一组相交的规则,我正在尝试添加功能,以允许用户引入规则之间的日期关系。例如,下面是一个示例(有问题的)生成的查询代码,该代码表示“the me all employees 150+ all all employees that至少有3次审计”。

代码语言:javascript
复制
select * FROM  
    (   
        SELECT employee_id 
               , max(employee_start_date) employee_start_date  
        from employees 
        where employee_salary_type in (55, 66, 77) 
    group by employee_id having count(*) >= 1
   ) employee_criteria_1,
  ( 
   SELECT employee_id 
             ,max(audit_date) audit_date  
       from employees 
   where job_audit_id in (5, 6, 7)  
   -- They had at least 3 audits
  group by employee_id having count(*) >= 3     
) employee_criteria_2
WHERE 
     employee_criteria_1.employee_id = employee_criteria_2.employee_id 
  -- The audits must have happened at least 150 days after employee's start date
   and   employee_criteria_2.audit_date > employee_criteria_1.employee_start_date + 150

正如您注意到的,UI中的每个条件都会生成到一个SQL SELECT块中,所有条件都相交在一起。这就是我的问题:

上面的查询检查员工是否至少进行了3次审计,最后一次审计MAX发生在开始日期后150天,而不是the 3 audits occur 150+ after start date

您可能会问,“那么,为什么有一个max(audit_date)语句呢?”原因是我需要有一个聚合函数,以便group by工作(这里的group是根据“至少发生3次”的高级查询条件生成的)。

那么,我可以向这段代码添加什么(不需要太多更改,因为我想保留这个代码生成机制),这样我现在就可以检查所有这3次发生/审计是否都发生在150+天之后(而不仅仅是最大的一次)?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2011-05-26 03:37:10

听起来您需要查看window functions,可能还需要查看having子句,而不是where子句。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6129102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档