gpt4 book ai didi

sql - PostgreSQL : How to update one field for all duplicate values based at the end of the string of a field except one row

转载 作者:行者123 更新时间:2023-11-29 13:26:46 24 4
gpt4 key购买 nike

http://sqlfiddle.com/#!9/b98ea/1 (示例表)

我有一个包含以下字段的表:

  1. 转账编号
  2. 来源路径
  3. DH_USER_ID
  4. 电子邮件
  5. 状态状态
  6. IP地址

src_path 字段包含几个重复的文件名值,但字符串开头的文件夹名称不同。

例子:

  1. 191915/NequeVestibulumEget.mp3
  2. /191918/NequeVestibulumEget.mp3
  3. 191920/NequeVestibulumEget.mp3

我正在尝试执行以下操作:

  1. 将 (src_path) 字段中所有重复文件名的 status_state 字段设置为“已取消”,一个除外。

我希望结果看起来像这样: http://sqlfiddle.com/#!9/5e65f/2

*作为一个完全的菜鸟,我提前道歉,但我在大学学习 SQL,我需要帮助。

最佳答案

SQL Fiddle Demo

  • fix_os_name:修复windows路径字符串为unix格式。
  • file_name:使用/分割路径,使用char_length带上最后分割。
  • drank:为每个文件名创建一个序列。所以唯一的文件名只有1,但是dup也有2,3 ...
  • 更新:检查该行是否有 rn > 1 意味着是重复的。

.

注意颜色突出显示是错误的,但代码运行正常。

with fix_os_name as (
SELECT transfer_id, replace(src_path,'\','/') src_path,
DH_USER_ID, email, status_state, ip_address
FROM priority_transfer p
),
file_name as (
SELECT
fon.*,
split_part(src_path,
'/',
char_length(src_path) - char_length(replace(src_path,'/','')) + 1
) sfile
FROM fix_os_name fon
),
drank as (
SELECT
f.*,
row_number() over (partition by sfile order by sfile) rn
from file_name f
)
UPDATE priority_transfer p
SET status_state = 'canceled'
WHERE EXISTS ( SELECT *
FROM drank d
WHERE d.transfer_id = p.transfer_id
AND d.rn > 1);

ADD:一行未触及

enter image description here

关于sql - PostgreSQL : How to update one field for all duplicate values based at the end of the string of a field except one row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32403487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com