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 你是需要清掉什么条件的数据? 你好
不清楚具体要怎么不同的截取
就大概说一下思路看一下是不是你想要的
将
SUBSTRING(ORDE.PARAMETERS,1,34) AS destination,
改为
if(agv.load_or_unload,1, SUBSTRING(ORDE.PARAMETERS,1,34),另一种截取) as destination finillusion 发表于 2022-9-28 17:58
你好
不清楚具体要怎么不同的截取
就大概说一下思路看一下是不是你想要的
直接写两个sql然后union一下就行了吧 写一个函数 把写入参设置成第二列的数据 然后函数内容执行按照参数提取指定位置 就是个思路 不会这个复杂的sql 放到jutyter按这个思路很简单 case
when1subString ()
when2subString()
end as result
是这个意思么?
oracle 的话 可以试试decode(),通用SQL的话用楼上的 CASE
load_or_unload
WHEN 1' THEN
substring_index(desination, ',', 1 )
WHEN '2' THEN
substring_index(desination, ',', 2 )
END
这个可以实现 如果是1 截取 第一个逗号如果是2 截取第二个逗号之前的 九州 发表于 2022-9-28 18:31
case
when1subString ()
when2subString()
谢谢大佬,这个可以,pgsql也通用,我忘记标注那个sql数据库语言了 赵黑黑 发表于 2022-9-28 18:50
CASE
load_or_unload
WHEN 1' THEN
谢大佬模板,感谢
页:
[1]
2