茫茫狐 发表于 2022-9-28 17:36

sql数据清洗,求思路

就是数据表中2行数据,他们有共同的order_id,想根据获取的字段不同信息不同(指的是load_or_unload字段,这里只有2,1),然后对目标字段的字符串(desination)进行不一样的截取。
大家有啥思路么

数据表截图获取截图


附上sql语句
SELECT
        agv.ID AS task_id,
        agv.task_set_no AS order_id,
        agv.parameter_int4_2 AS load_or_unload,
        SUBSTRING(ORDE.PARAMETERS,1,34) AS destination, --目前只能单一对字段截取
        agv.created_timestamp AS task_create_time,
        agv.last_updated_timestamp AS task_finish_time
FROM
        layer2_pallet.agv_task agv
        INNER JOIN (
        SELECT
                o.order_id,
                oc.PARAMETERS
        FROM
                layer4_1_om."order" o,
                layer4_1_om."order_command" oc
        WHERE
                o.ts_id = 'p2p'
                AND o.order_id = oc.id
                AND create_time BETWEEN '2022-08-31 00:00:00'
                AND '2022-08-31 23:59:59'
        ORDER BY
                create_time
        ) AS ORDE ON agv.task_set_no = CAST ( ORDE.order_id AS VARCHAR )
WHERE
        parameter_int4_2 = 2
        OR parameter_int4_2 = 1
ORDER BY
        agv.task_set_no ASC,
        agv.created_timestamp ASC,
        parameter_int4_2 DESC

godonlyknow 发表于 2022-9-28 17:54

你是需要清掉什么条件的数据?

finillusion 发表于 2022-9-28 17:58

你好
不清楚具体要怎么不同的截取
就大概说一下思路看一下是不是你想要的

SUBSTRING(ORDE.PARAMETERS,1,34) AS destination,
改为
if(agv.load_or_unload,1, SUBSTRING(ORDE.PARAMETERS,1,34),另一种截取) as destination

laomu301857 发表于 2022-9-28 18:11

finillusion 发表于 2022-9-28 17:58
你好
不清楚具体要怎么不同的截取
就大概说一下思路看一下是不是你想要的


直接写两个sql然后union一下就行了吧

狐白本白 发表于 2022-9-28 18:21

写一个函数 把写入参设置成第二列的数据 然后函数内容执行按照参数提取指定位置 就是个思路 不会这个复杂的sql 放到jutyter按这个思路很简单

九州 发表于 2022-9-28 18:31

case
when1subString ()
when2subString()
end as result
是这个意思么?
   

浣熊 发表于 2022-9-28 18:38

oracle 的话 可以试试decode(),通用SQL的话用楼上的

赵黑黑 发表于 2022-9-28 18:50

CASE
                load_or_unload
                WHEN 1' THEN
                substring_index(desination, ',', 1 )
                WHEN '2' THEN
                substring_index(desination, ',', 2 )
END

这个可以实现 如果是1 截取 第一个逗号如果是2 截取第二个逗号之前的

茫茫狐 发表于 2022-9-28 20:25

九州 发表于 2022-9-28 18:31
case
when1subString ()
when2subString()


谢谢大佬,这个可以,pgsql也通用,我忘记标注那个sql数据库语言了

茫茫狐 发表于 2022-9-28 20:26

赵黑黑 发表于 2022-9-28 18:50
CASE
                load_or_unload
                WHEN 1' THEN


谢大佬模板,感谢
页: [1] 2
查看完整版本: sql数据清洗,求思路