mysql group 通过使用范围记录值

标签 mysql group-by group-concat

在 SQL 中我有下面的表 t_test:

emp_code | period_month | company_code  
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

我想查询以下结果:

emp_code | company_code | from_month  | to_month 
--------------------------------------------------
NIK001   | ALPHA        | 01          | 05
NIK001   | BETA         | 06          | 09
NIK001   | ALPHA        | 10          | 12

最佳答案

这让我害怕得发抖,但它确实输出了你所追求的近似值:

    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');

关于mysql group 通过使用范围记录值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5691159/

相关文章:

sql - 我是否正确使用 GROUP_CONCAT?

mysql - SQL : count days between two dates

php - 如何复制MySQL字段?

mysql - 摘要查询返回重复值 MySQL

python - 如何按唯一值分组 pandas groupby

mysql - GROUP_CONCAT 编号

javascript - 将 JS var 存储到数据库中

java - 我如何为给定的 SQL 查询编写 JPA 查询

r - 根据与 data.frame 的相似性对字符串进行分组

MySQL GROUP_CONCAT