永洪社区

标题: 数据排重问题,急!急!!急!!! [打印本页]

作者: 符拉迪沃斯托克    时间: 3 天前
标题: 数据排重问题,急!急!!急!!!
本帖最后由 符拉迪沃斯托克 于 2024-10-29 11:52 编辑

现在明细数据有同一VIN存在多条记录,计划保养里程,仪表里程。现在想根据计划里程和仪表里程差取两条。
判断逻辑:取计划保养里程最接近仪表里程的前后两条。其他数据不展示,请大神指教,谢谢!(如果前后存在,则最多展示2条,如果只存在某一种情况就只展示一条)
该需求无法使用SQL,因跨库跨源,只能前台处理,前台尝试多次无法实现,急求









作者: yhdata_lyaa    时间: 3 天前
取计划保养里程最接近仪表里程的前后两条,是指两个字段接近吗,进行减法判断取最小值吗
作者: 符拉迪沃斯托克    时间: 3 天前
yhdata_lyaa 发表于 2024-10-29 11:42
取计划保养里程最接近仪表里程的前后两条,是指两个字段接近吗,进行减法判断取最小值吗 ...

嗯呢,是的,可以这么理解。就是取差值最小的。
计划保养里程<=仪表里程时,按照计划保养里程排序,取最大值那条显示;
当计划保养里程>仪表里程时,按照计划保养里程排序,取最小值那条显示。
最终同一台车的记录最多展示两条。
作者: 符拉迪沃斯托克    时间: 3 天前
yhdata_lyaa 发表于 2024-10-29 11:42
取计划保养里程最接近仪表里程的前后两条,是指两个字段接近吗,进行减法判断取最小值吗 ...

我又重新截图了
作者: yhdata_lyaa    时间: 3 天前
符拉迪沃斯托克 发表于 2024-10-29 11:49
嗯呢,是的,可以这么理解。就是取差值最小的。
计划保养里程仪表里程时,按照计划保养里程排序,取最小值 ...

新建计算列=仪表里程-计划保养里程 。绑定后计算列度量选择最小值呢如果是绝对值,计算列 相减取绝对值

参考函数abs
https://www.yonghongtech.com/rea ... D%E5%AF%B9%E5%80%BC
返回给定数据的绝对值。


作者: 符拉迪沃斯托克    时间: 3 天前
yhdata_lyaa 发表于 2024-10-29 13:15
新建计算列=仪表里程-计划保养里程 。绑定后计算列度量选择最小值呢如果是绝对值,计算列 相减取绝对值

这样取最小值只能取出一条吧,现在意思是要取出两条。就是一条比仪表里程小(最接近仪表里程),一条比仪表里程大(最接近仪表历程)。
作者: yhdata_lyaa    时间: 3 天前
符拉迪沃斯托克 发表于 2024-10-29 13:20
这样取最小值只能取出一条吧,现在意思是要取出两条。就是一条比仪表里程小(最接近仪表里程),一条比仪 ...


那你写两个计算列判断吧弄两个表吧。
这应该是明细表吧,不能取top2
作者: 符拉迪沃斯托克    时间: 3 天前
yhdata_lyaa 发表于 2024-10-29 14:31
那你写两个计算列判断吧弄两个表吧。
这应该是明细表吧,不能取top2 ...

嗯呢,在研究计算列了,没写出来。。。
作者: yhdata_lyaa    时间: 3 天前
符拉迪沃斯托克 发表于 2024-10-29 11:49
嗯呢,是的,可以这么理解。就是取差值最小的。
计划保养里程仪表里程时,按照计划保养里程排序,取最小值 ...

嗯嗯,按照你的逻辑写两个

语法参考https://www.yonghongtech.com/rea ... aculategrammar.html结果就是这样的



作者: 符拉迪沃斯托克    时间: 3 天前
写出来了,但是过滤不掉不满足条件的数据
作者: yhdata_lyaa    时间: 3 天前
不知道你说的是什么数据
作者: 驰骋原野    时间: 3 天前
取绝对值最小的两条不就可以了,abs(计划里程 - 仪表里程) ,这样肯定能覆盖2条前,2条后,1前1后这三种情况~
作者: 符拉迪沃斯托克    时间: 3 天前
驰骋原野 发表于 2024-10-29 15:50
取绝对值最小的两条不就可以了,abs(计划里程 - 仪表里程) ,这样肯定能覆盖2条前,2条后,1前1后这三种情 ...

问题是写出来怎么过滤出来呢
作者: 符拉迪沃斯托克    时间: 3 天前
驰骋原野 发表于 2024-10-29 15:50
取绝对值最小的两条不就可以了,abs(计划里程 - 仪表里程) ,这样肯定能覆盖2条前,2条后,1前1后这三种情 ...

这样计算会有问题,如果没有负值,只有正值,就会多取出一条(因为取绝对值就没法判断正负值了)。现在是负的取最大,正的取最小。
作者: 符拉迪沃斯托克    时间: 3 天前
yhdata_lyaa 发表于 2024-10-29 15:20
不知道你说的是什么数据

能不能远程一下啊
作者: 符拉迪沃斯托克    时间: 3 天前
本帖最后由 符拉迪沃斯托克 于 2024-10-29 16:37 编辑
驰骋原野 发表于 2024-10-29 15:50
取绝对值最小的两条不就可以了,abs(计划里程 - 仪表里程) ,这样肯定能覆盖2条前,2条后,1前1后这三种情 ...

如何取出区间内的这两条?这个计算列所有数据都会计算,现在需要过滤出来,只显示这两条。
作者: yhbi老6了    时间: 3 天前
驰骋原野 发表于 2024-10-29 15:50
取绝对值最小的两条不就可以了,abs(计划里程 - 仪表里程) ,这样肯定能覆盖2条前,2条后,1前1后这三种情 ...

然后,按维度做升序的top2的汇总排序?
作者: yhbi老6了    时间: 3 天前
你这个,如果可以的话,建议让数开处理好数据你再用,不建议在bi上做过多的数据处理,bi这边做过多的处理会导致报告和数据不可以充分划清界限,维护困难,报告性能也不佳。
作者: 符拉迪沃斯托克    时间: 3 天前
yhbi老6了 发表于 2024-10-29 16:41
你这个,如果可以的话,建议让数开处理好数据你再用,不建议在bi上做过多的数据处理,bi这边做过多的处理会 ...

好的好的,感谢。这个闭环了
作者: 驰骋原野    时间: 前天 09:39
符拉迪沃斯托克 发表于 2024-10-29 16:28
问题是写出来怎么过滤出来呢

加个绝对值计算列,然后vin字段那里设置高级排序,按绝对值计算列顺序排,取top 2,就可以取无论哪个方向最接近仪表里程的2条记录

作者: 符拉迪沃斯托克    时间: 前天 09:44
驰骋原野 发表于 2024-10-30 09:39
加个绝对值计算列,然后vin字段那里设置高级排序,按绝对值计算列顺序排,取top 2,就可以取无论哪个方向 ...

这样取得不合理,不是绝对值取前2

假设100是实际里程,计划里程时  20  80   90   101  105  106,那应该取得是最近接100的前后两条。取90 和101。如果用绝对值的话就取成101和105了。这个应该分类讨论。当小于100的时候取最大值90;当大于100的时候取最小值101。
目前该问题已解决。后台代码实现的,前台没搞定。




欢迎光临 永洪社区 (https://club.yonghongtech.com/) Powered by Discuz! X3.4