mysql怎么查询上一周的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql怎么查询上一周的数据相关的知识,希望对你有一定的参考价值。

参考技术A 查询当前这周的数据
SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now());

查询上周的数据
SELECT name,submittime FROM enterprise WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now())-1;

查询当前月份的数据
select name,submittime from enterprise where date_format(submittime,'%Y-%m')=date_format(now(),'%Y-%m')
参考技术B 改时间啊when start_time and end_time

Mysql 使用 JOIN 获取过去六周的数据

【中文标题】Mysql 使用 JOIN 获取过去六周的数据【英文标题】:Mysql Get data for Last Six weeks using JOIN 【发布时间】:2016-06-02 05:14:55 【问题描述】:

我通过选择过去六周内完成评估的所有员工数据来编辑查询。从逻辑上讲,如果它在两周内完成了评估,则每个员工应该两次,但此查询显示单个记录。

 select 
   AssessmentEmployee.
   EmployeeName,
   AVG(AssessmentListing.AssessmentScore),
   DATE_FORMAT((STR_TO_DATE(`AssessmentSubmittedDatetime`, '%d-%b-%Y %I:%i %p')) , '%Y-%m-%v') as _month 
 from AssessmentEmployee 
 LEFT JOIN AssessmentListing 
 ON  AssessmentEmployee.AssessmentID=AssessmentListing.AssessmentID 
 WHERE (STR_TO_DATE(`AssessmentSubmittedDatetime`, '%d-%b-%Y %I:%i %p') >= DATE_FORMAT(NOW() - INTERVAL 6 Week, '%Y' )) 
 group by AssessmentEmployee.EmployeeName 

我正在使用下表。

AssessmentEmployee
 ID
 AssessmentID
 EmployeeName

其他表是AssessmentListing

ID
AssessmentID
AssessmentSubmittedDateTime
AssessmentScore

我想获取在 Last sex week 中得分/完成评估的员工及其平均得分。

AssessmentListing 数据列示例

ID  AssessmentID     AssessmentSubmittedDatetime     AssessmentScore 
1     040416024720     04-Apr-2016 02:48 PM             50

【问题讨论】:

你需要按week numberemployee name分组。 当您说group by AssessmentEmployee.EmployeeName 时,它要求将EmployeeName 的每个值的所有数据汇总到一行中。所以当然你只会得到一排(不是你期望的两排)。 @Turophile 我想说亚当和杰克逊在过去两周内已经完成了所以它应该同时显示,并且如果过去六周中的任何一周没有记录比前几周它应该显示不需要其他几周 @1000111 我已经添加了机器人,但它不应该只显示过去六周,而是说最后六周是 22、21、20、19、18、17,所以假设没有数据如果是 21,那么它也会选择 16,如果不能不显示,它应该只显示最后六个 AssessmentSubmittedDateTime的数据类型是什么? 【参考方案1】:

请尝试以下查询:

select 
   AssessmentEmployee.
   EmployeeName,
   AVG(AssessmentListing.AssessmentScore),
   DATE_FORMAT((STR_TO_DATE(`AssessmentSubmittedDatetime`, '%d-%b-%Y %I:%i %p')) , '%Y-%v') as year_week
 from AssessmentEmployee 
 LEFT JOIN AssessmentListing 
 ON  AssessmentEmployee.AssessmentID=AssessmentListing.AssessmentID 
 WHERE UNIX_TIMESTAMP(DATE_FORMAT(STR_TO_DATE(`AssessmentSubmittedDatetime`,'%d-%b-%Y %I:%i %p'),'%Y-%m-%d')) >= UNIX_TIMESTAMP(CURDATE() - INTERVAL 6 WEEK)
 group by AssessmentEmployee.EmployeeName, year_week;

您不应该将日期/时间存储为字符串。否则,在处理这些繁琐的工作时接受它们。

【讨论】:

你是对的,但我没想到我们会得到这样的报告,这就是为什么使用 那么现在告诉我这行得通吗?你得到预期的输出吗? @DilshadAli 我要出去了,但让我确认一下 如果可以的话,我们可以稍后开始聊天吗 当然。请去吧。【参考方案2】:

你正在做一个平均,所以如果他们拿了两次,它将平均 2 个分数。

【讨论】:

【参考方案3】:
SELECT *, SUM(AssessmentScore) as total, SUM(AssessmentScore)/6 as avg
FROM `assessmentlisting` 
WHERE STR_TO_DATE(`AssessmentSubmittedDatetime`, '%d-%b-%Y %I:%i %p') > DATE_FORMAT(NOW() - INTERVAL 6 Week, '%Y-%m-%d %I:%i %p' ) 
GROUP BY assessmentlisting.AssessmentID

希望它会起作用。

【讨论】:

以上是关于mysql怎么查询上一周的数据的主要内容,如果未能解决你的问题,请参考以下文章

mysql给定一年中的第几周,输出这一周的日期

php如何获取数据库里上一周的数据?

Mysql 使用 JOIN 获取过去六周的数据

mysql数据库按周统计

取上个月和上一年的数据,sql怎么写

sql语句 查询一个月的几个周的数据