gpt4 book ai didi

mysql - 从 MySQL 数据库获取给定日期一段时间内的信息

转载 作者:行者123 更新时间:2023-11-29 12:26:02 26 4
gpt4 key购买 nike

给定一个像这样的简单数据库:

database

如何在单个查询中根据起始日期检索员工当年的销售总数?

例如,添加的员工的开始日期为 2015 年 3 月 1 日。2015 年 3 月 1 日至 2016 年 2 月 28 日之间的期间是他们的第一年,2016 年 3 月 1 日至 28 日之间的日期是他们的第一年2017 年 2 月是第二年,依此类推。

因此,如果查询在 2017 年 3 月 5 日运行,它将返回 2017 年 3 月 1 日到 2017 年 3 月 5 日之间的数据,因为那是当年。同样,如果查询在 2017 年 2 月 13 日运行,它将返回 2016 年 3 月 1 日到 2017 年 2 月 13 日之间的所有销售额,因为那将是其当年。

目前,我可以实现此功能的唯一方法是在一个查询中检索员工的开始日期,获取一年中的月份和日期,检查该日期是否已经过了今年,然后形成新的一年就这样开始日期。比如这样:

//Get the year start date for the employee
$stmt = $dbh->prepare("select StartDate from employee where EmpID = ?");
$stmt->execute(array($empID));
$employee = $stmt->fetch(PDO::FETCH_ASSOC);
$dateArray = explode("-", $employee['StartDate']);

//If the current month and day is greater than the start date then its not been the end of the year, so the start year is the current year -1
//If not then it has not gone past the end of the year, and the start year is same as the current year.

if (date('m') <= $dateArray[1] && date('d') <= $dateArray[2]){
$yearStart = (date('Y')-1)."-".$dateArray[1]."-".$dateArray[2];
}else{
$yearStart = date('Y')."-".$dateArray[1]."-".$dateArray[2];
}

然后我可以再次查询数据库以检索生成的年初的所有销售额。

上面的方法可行,但是是否可以将其放入单个 MySQL 查询中?

最佳答案

这是有点复杂的日期算术。您需要将销售日期的月/日与开始日期的月/日进行比较。然后,您需要确定年份是当前年份还是上一年。

假设销售日期不是 future ,以下内容表达了此逻辑:

select e.empId, count(*), sum(amount)
from employee e join
sales s
on e.empId = s.empId
where (date_format(now(), '%m-%d') >= date_format(e.startdate, '%m-%d') and
s.date >= str_to_date(concat_ws('-', year(now()), month(e.startdate), day(e.startdate))
) or
(date_format(now(), '%m-%d') < date_format(e.startdate, '%m-%d')
s.date >= str_to_date(concat_ws('-', year(now()) - 1, month(e.startdate), day(e.startdate))
)
group by e.empId

关于mysql - 从 MySQL 数据库获取给定日期一段时间内的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28304035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com