sql - 如何根据相似的交易地址重新分类 user_id
问题描述
简而言之,我正在尝试查看不同的transaction_address
值,并且任何时候有 2 个或更多相同的值,我想检查是否满足以下任何条件:
如果 OUTPUT_IP 相同和/或 OUTPUT_AMOUNT 相同,则创建一个
reclassified_address
列出 OUTPUT_ID 的新列(例如 );如果 INPUT_IP 相同和/或 INPUT_AMOUNT 相同,则
reclassified_address
使用列出的 INPUT_ID 创建一个新列(例如)
此处的目标是使用副本transaction_address
作为调查用户是否控制多个 IP 地址的一种方式。
这是我正在使用的表格示例:
TRANSACTION_ADDRESS | INPUT_IP | OUTPUT_IP | INPUT_AMOUNT | OUTPUT_AMOUNT
--------------------+----------+-----------+--------------+-------------------
15c7853 xyz abc -0.01 0.70
15c7853 def abc -0.50 0.70
19vc842 abc xyz3 -5.03 0.413
19vc842 abcd xyz3 -0.06 0.201
188fdx8 abc xyz4 -0.10 0.09
154gf34 xyz1 abc -0.07 0.18
45f4ti5 ggg abc -0.10 0.24
33cv5c5 jjj abc -0.08 1.13
这是满足条件 1 的示例和快速概述(类似的逻辑将用于条件 2):
TRANSACTION_ADDRESS | INPUT_IP | OUTPUT_IP | INPUT_AMOUNT | OUTPUT_AMOUNT
--------------------+----------+-----------+--------------+---------------
15c7853 xyz abc -0.01 0.70
15c7853 def abc -0.50 0.70
从这个例子中,我们看到TRANSACTION_ADDRESS
15c7853出现 >=2 次,所以现在我们检查OUTPUT_IP
和/或OUTPUT_AMOUNT
值是否相同。在这种情况下,它们都是,所以我们用abc重新分类INPUT_IP
xyz和def。这会让我知道使用xyz的人也很可能也在使用def和abc。所需的输出如下所示:
TRANSACTION_ADDRESS | INPUT_IP | OUTPUT_IP | INPUT_AMOUNT | OUTPUT_AMOUNT | reclassified_address
--------------------+----------+-----------+--------------+---------------+---------------------
15c7853 xyz abc -0.01 0.70 abc
15c7853 def abc -0.50 0.70 abc
我尝试使用 HAVING 子句返回重复项:
SELECT TRANSACTION_ADDRESS, COUNT(*)
FROM sample_table
GROUP BY TRANSACTION_ADDRESS
HAVING COUNT(*) >= 2
但是,我不确定这是否是正确的方法,并且我不确定在满足条件 1 或 2 时如何返回新列。
解决方案
推荐阅读
- javascript - 使用字符串变量引用导入的模块
- c# - “ToListAsync()”和“AsAsyncEnumerable().ToList()”之间的区别
- sccm - 自定义任务序列 - 启动时的脚本安装程序
- azure-devops - 代码审查注释可以导出到 Excel 或其他格式吗?
- mysql - 需要帮助获取每个 Drupal 8 用户帐户的评论计数
- python - pyarrow hdfs 读取的数据多于请求的数据
- sql - 聚合表达式不能在 WHERE 子句中使用
- c - 在 C 中调用 GNU Octave 函数?
- security - JWT 代币存储
- javascript - 为什么 JavaScript split() 方法即使没有分隔符也会返回一个数组?