mysql - 日期差异之和的平均值.. MySQL

标签 mysql sql

因此,我试图找出员工从被录用到获得加薪所需的平均时间。

我已经尝试了一些东西,但我做对了。

这是我的数据库的样子: https://dev.mysql.com/doc/employee/en/sakila-structure.html

这是我试过的:

SELECT AVG(SUM(datediff(hire_date, min((SELECT from_date FROM salaries
                                        WHERE from_date > hire_date AND
                                        (SELECT salary FROM salaries
                                         WHERE from_date = hire_date) <
                                        (SELECT salary FROM salaries 
                                         WHERE from_date > hire_date))))))
FROM employees;

任何帮助将不胜感激,从逻辑上讲这应该是正确的(也许不是),我可能只是搞砸了语法......

谢谢!

最佳答案

这不是一个简单的查询,但您可能会在类(class)中尝试自己找到它,并在此过程中学习很多 SQL。

在实际的系统开发情况下,如果 SQL 变得太重或太复杂,有时程序员更容易做更多的查询,使用存储过程或用编程语言解决它。

但是,作为帮助,我相信这会成功:

select avg(md) from (
    select emp_no, min(days) as md from 
        (select  s1.emp_no as emp_no, 
                 s1.from_date as start, 
                 datediff(s2.from_date,s1.from_date) as days 
                 from employees e inner join salaries s1 on                   
                 e.emp_no=s1.emp_no 
                 inner join salaries s2 on s1.emp_no=s2.emp_no 
                 where 
                 s2.from_date <> s1.from_date and
                 s1.from_date < s2.from_date and
                 s1.from_date = e.hire_date
         ) t ) tt group by emp_no 

想法是首先进行昂贵的 JOIN 以查找日期的所有差异(从 s2s2 - 从 s1)但仅当 date_from 等于 hire_date 并且日期不相等时。 (差异=0)。

第二个内部选择得到每个员工的最小值,这肯定是第一次晋升。

外部选择进行平均。

关于mysql - 日期差异之和的平均值.. MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35784441/

相关文章:

sql - 数据库设计帮助 - EAV + Form builder

mysql - 构建用户收藏夹表的正确方法是什么(性能)

c# - 如何修复执行多个 SQL 语句的超慢 EF/LINQ 查询

mysql - ASP.NET MVC Entity FrameWork 中一个 View 中的多个模型

javascript - 在带有辅助函数的 ejs 中使用 .then 返回 [ object promise ]

php - 仅显示列值;不是 Yii 中的列名

mysql - c语言与mysql(如何将mySQL数据库包含到程序中)

java日期到sql日期类型转换

mysql - 出于机器学习目的存储多个来源的数据的最佳实践

mysql - SQL 派生表