求助
sql吧
全部回复
仅看楼主
level 2
上官_箫阳 楼主
这是一张转科日志表,id是自增的,user_id唯一代表一个人,为了方便展示问题,我筛选出了一个人的id,需要查询出一张新表,有user_id、时间、转出的dept_code、转入的dept_code,形成转科记录表,意思转科的时候有原科室和新科室,当transfer_type有取消时,形成一个上一次逆向转入转出的记录,只需将转出的dept_code、转入的dept_code对调一下就行。请教一下大佬们,需要怎么写语句,主要是这个取消逻辑不太会
2021年07月15日 02点07分 1
level 8
很简单
select top 1 * from 表 a where transfer_type='转入' and id <
(select id from 表 where transfer_type='取消')
order by id desc
UNION ALL
select top 1 * from 表 a where transfer_type='转出' and id <
(select id from 表 where transfer_type='取消')
order by id desc
这就是“上一次逆向转入转出的记录” 然后你修改 transfer_type 字段,原'转入' 变'转出', 原'转出' 变'转入'即可
2021年07月15日 03点07分 2
谢谢,这个思路确实不错,但是我想不出来把不同user_id加进新表中怎么弄,还有就是每个user_id的记录中可能没有取消,或者有多个取消
2021年07月15日 05点07分
@上官_箫阳 不同user的我写一下,加两个条件就行了
2021年07月15日 06点07分
@咸鱼初号机💤 主要是做个视图,把每个user的转科记录做出来,有原科室和新科室,我太菜了
2021年07月15日 06点07分
@上官_箫阳 我写在新楼了,那个逻辑是重复取消也算,如果只要最后一次的话大于0改成等于1就行。大概是这样了毕竟没数据没办法验证
2021年07月15日 06点07分
level 8
select * from 表 a
where EXISTS (
select 1 from
(select user_id, max(id) id from 表 a
where transfer_type='转出' and
(select count(1) from 表 where transfer_type='取消' and a.user_id=user_id and id >a.id) >0
GROUP BY user_id
UNION ALL
select user_id, max(id) id from 表 a
where transfer_type='转出' and
(select count(1) from 表 where transfer_type='取消' and a.user_id=user_id and id >a.id) >0
GROUP BY user_id)v where a.user_id=user_id and a.id=id)
2021年07月15日 06点07分 3
谢谢,语句有点复杂,我来理一理
2021年07月15日 06点07分
@上官_箫阳 我两个都写转出了,其中一个要改转入
2021年07月15日 06点07分
@咸鱼初号机💤 回复 咸鱼初号机💤 :谢谢xd,我看你的有了新的启发,已经搞出来了
2021年07月15日 07点07分
1