Re: [SQL ] 列出一个字段中开始变化的前后值

楼主: JeremyJoung (J.J.)   2016-04-30 00:19:28
老实说 这个需求不算难 但是你指定的输出格式并不佳
大幅提升了计算难度
理想的输出最好是
同一个人在"同一行"内用多个字段来表示UNIT的差异 而不是用"多行"显示
SELECT a.*
FROM table AS a
LEFT JOIN table b ON a.id=b.id && a.year=b.year-1 && a.unit<>b.unit
LEFT JOIN table c ON a.id=c.id && a.year=c.year+1 && a.unit<>c.unit
WHERE a.id IN(SELECT id FROM table GROUP BY id HAVING COUNT(DISTINCT unit) >1)
##先取有换单位的人
&& (b.id IS NOT NULL || c.id IS NOT NULL)
ORDER BY a.id, a.year DESC
这还不是最好的算式 但是够快了 简短比较重要
a.id IN() 是用来加速的 实际上可以完全不用
缺点是年份要相连 否则抓不到
也有年分不用相连的方法 但是又会更复杂
※ 引述《Schematic (小小宝的妈)》之铭言:
: 数据库名称:SQL SERVER
: 数据库版本:2012
: 内容/问题描述:
: 列出某位员工在哪一年换了单位,没有换单位的员工不用列出
: Num id year unit
:

Links booklink

Contact Us: admin [ a t ] ucptt.com