php - php mysql在记录之间按月选择
问题描述
我有这个 MySQL 表 my_table:
+-------+------------+-----------+
|Student| Date | Classroom |
+-------+------------+-----------+
| 1 | 2018-01-01 | 101 |
| 2 | 2018-01-01 | 102 |
| 3 | 2018-01-01 | 103 |
| 1 | 2018-03-01 | 104 |
| 2 | 2018-06-01 | 103 |
| 3 | 2018-09-01 | 104 |
| 1 | 2018-11-01 | 106 |
| 2 | 2018-12-01 | 101 |
+-------+------------+-----------+
学生们待在指定的教室里,直到换完为止。
我想知道他们在哪个教室呆了一个月。
例如在 10 月(10 日),学生 1 在 104 中,2 在 103 中,3 在 104 中。
我真的不确定如何继续进行此操作,因此不胜感激。
当前使用基于草莓答案的此查询
SELECT x.*
FROM my_table x
LEFT OUTER JOIN my_table y
ON y.student = x.student
AND y.date < x.date
WHERE x.date <= LAST_DAY('2018-10-01')
GROUP BY student
解决方案
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(Student INT NOT NULL, Date DATE NOT NULL, Classroom INT NOT NULL,PRIMARY KEY(student,classroom));
INSERT INTO my_table VALUES
(1,'2018-01-01',101),
(2,'2018-01-01',102),
(3,'2018-01-01',103),
(1,'2018-03-01',104),
(2,'2018-06-01',103),
(3,'2018-09-01',104),
(1,'2018-11-01',106),
(2,'2018-12-01',101);
SELECT x.*
FROM my_table x
JOIN
( SELECT student
, MAX(date) date
FROM my_table
WHERE date <= LAST_DAY('2018-10-01')
GROUP
BY student
) y
ON y.student = x.student
AND y.date = x.date;
+---------+------------+-----------+
| Student | Date | Classroom |
+---------+------------+-----------+
| 1 | 2018-03-01 | 104 |
| 2 | 2018-06-01 | 103 |
| 3 | 2018-09-01 | 104 |
+---------+------------+-----------+
推荐阅读
- npm - 找不到模块“@angular/core”。在我的离子应用程序中
- axapta - 文件日期 不具体 ax 2012 x++ 采购订单
- azure - Application Insights:Profiler Trace Duration 搞砸了
- postgresql - PostgreSQL上浮点数的模运算
- python - 将 3 列合并为一列 pandas
- java - 仅当语言不支持时,我如何要求 FOP 读取外部字体
- python - 合并分类:如何处理重复
- python-3.x - python pyserial模块中的键盘中断滞后
- algorithm - 当必须始终包含一条或多条边时,完整无向图中的哈密顿回路总数是多少?
- python - AttributeError:模块“google.cloud.vision”没有属性“客户端”