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 number
和employee 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怎么查询上一周的数据的主要内容,如果未能解决你的问题,请参考以下文章