mysql - SQL查询 - 选择一个月中每一天的第一条和最后一条记录
问题描述
Mysql 5.7.30:我有两个表:
项目:projectID,timeNeeded
注册:registrationID、projectID、startDateTime
我想要实现的目标:对于当前月份(基于 startDateTime),我想通过选择当月每一天的第一条和最后一条记录来了解“timeNeeded”。如果一天只有 1 条记录,它仍然应该计算两次。
例如,如果一天有 4 个注册,我只想包括这 4 个中的第一个和最后一个。
我有点不确定如何从这里开始,我想有多种方法可以实现这一目标。速度不重要,只要比我的第一个想法好;使用多个查询和 PHP 来处理它。
样本数据和想要的结果:
Project table:
project1 50
project2 20
project3 30
Registation table: (hour:minute hidden)
reg1 project1 2020-07-01
reg2 project1 2020-07-01
reg3 project3 2020-07-02
reg4 project3 2020-07-02
reg5 project2 2020-07-02
reg6 project2 2020-07-02
reg7 project3 2020-07-03
reg8 project1 2020-07-04
reg9 project3 2020-07-05
reg10 project2 2020-07-05
Result (projects.timeNeeded for first and last of each day):
reg1 50
reg2 50
reg3 30
reg6 20
reg7 30
reg7 30
reg8 50
reg8 50
reg9 30
reg10 20
解决方案
这个要求的棘手部分是只有 1 个注册的日期的双行,这就是我使用 UNION ALL 的原因。
需要聚合来获取每天的第一startDateTime
天和最后一天并最终加入:
select r.registrationID, p.timeNeeded
from (
select registrationID, projectID, startDateTime
from Registration
union all
select max(registrationID), max(projectID), max(startDateTime)
from Registration
group by date(startDateTime)
having count(*) = 1
) r
inner join (
select date(startDateTime) date,
min(startDateTime) min_date,
max(startDateTime) max_date
from Registration
where date_format(startDateTime, "%Y-%m") = date_format(current_date, "%Y-%m")
group by date
) t on r.startDateTime in (t.min_date, t.max_date)
inner join Project p on p.projectID = r.projectID
order by r.startDateTime
请参阅演示。
结果:
| registrationID | timeNeeded |
| -------------- | ---------- |
| reg1 | 50 |
| reg2 | 50 |
| reg3 | 30 |
| reg6 | 20 |
| reg7 | 30 |
| reg7 | 30 |
| reg8 | 50 |
| reg8 | 50 |
| reg9 | 30 |
| reg10 | 20 |
推荐阅读
- python - Python 请求使用自定义 dns 获取网站
- vb.net - vb.net 如何在不使用内存的情况下读取非常大文件的一小部分?
- python - 从整数输入中分离分组数字
- kubernetes - 具有复制和本地持久卷的 Kubernetes pod 调度?
- python - 使用 trackpy 进行粒子跟踪会产生“keframe”错误?
- django - 如何在 Django 3.1 中使用 jinja2
- html - 切换时复选框未打开菜单
- python - 目标维度不匹配
- python - 如何将 Pandas Dataframe 转换为 Keras RNN 以解决多变量分类问题
- api - 为什么我会收到错误消息:Android Gradle 插件仅支持 Kotlin Gradle 插件版本 1.3.10 及更高版本