这让我害怕得发抖,但它确实输出了你所追求的近似值:
select w.emp_code, w.company_code, w.period_month from_month,
(select min(convert(u.period_month,unsigned))-1 from t_test u where u.emp_code=w.emp_Code and convert(u.period_month,signed)>convert(w.period_month,signed) and u.company_code<>w.company_code) to_month
from
(
select * from
(
select y.emp_code, y.period_month, y.company_code,
(select x.company_code from t_test x where x.emp_code=y.emp_code and convert(x.period_month,unsigned)<convert(y.period_month,unsigned) order by convert(x.period_month,unsigned) desc limit 1) previous_company_code
from t_test y
) z
where company_code<>previous_company_code or previous_company_code is null
) w
但是,我只是出于好奇而尝试了这个。您不应该在生产环境中真正依赖类似的东西。我认为简单的 SQL 查询不适合您的问题。我会去别处看看。
编辑:基于下表:
CREATE TABLE `t_test` (
`emp_code` varchar(50) DEFAULT NULL,
`period_month` varchar(2) DEFAULT NULL,
`company_code` varchar(50) DEFAULT NULL
);
填充以下 INSERT 语句:
INSERT INTO `t_test` (`emp_code`,`period_month`,`company_code`)
VALUES
('NIK001', '01', 'ALPHA'),
('NIK001', '02', 'ALPHA'),
('NIK001', '03', 'ALPHA'),
('NIK001', '04', 'ALPHA'),
('NIK001', '05', 'ALPHA'),
('NIK001', '06', 'BETA'),
('NIK001', '07', 'BETA'),
('NIK001', '08', 'BETA'),
('NIK001', '09', 'BETA'),
('NIK001', '10', 'ALPHA'),
('NIK001', '11', 'ALPHA'),
('NIK001', '12', 'ALPHA');