我餐桌上的人喜欢:
id, bron_year, file_date
2, 1943, 2010
5, 1952, 2017
7, 1953, 2018
8, 1952, 2018
9, 1954, 2017
此处的file_date表示该人的创建日期的文件,而file_date> = 2009。
然后我创建一个过程,例如:
CREATE OR REPLACE PROCEDURE `aged_person`()
BEGIN
DECLARE c_year int;
SET c_year = 2009;
WHILE c_year < YEAR(CURDATE()) DO
SELECT * FROM `person` WHERE YEAR(`file_date`) = c_year AND c_year - `bron_year` >= 65 ORDER BY `file_date` ASC, `id` ASC;
SET c_year = c_year + 1;
END WHILE;
END;
这意味着每年都要收集老年人(在那一年,该人的年龄> = 65)。
现在我要合并所有结果,并且必须保持顺序。请怎么做?
顺便说一句,我不想创建一个临时表,因为有人离开了(搬家,缺少访问),那么那个人将不在表中。
示例: 如果c_year = 2018,则结果(保留顺序):
2, 1943, 2010
5, 1952, 2017
8, 1952, 2018
7, 1953, 2018
如果c_year = 2019,则结果(保留顺序):
2, 1943, 2010
5, 1952, 2017
8, 1952, 2018
7, 1953, 2018
9, 1954, 2017
答案 0 :(得分:0)
简单查询,没有存储过程:
SELECT *
FROM person
WHERE file_date >= 2009
AND (file_date - bron_year) >= 65
ORDER BY file_date ASC, id ASC