写一段sql 条件一:累计6次及以上交易对手为不同户名,条件二:6笔交易时间差在10分钟内
时间: 2024-02-20 20:02:38 浏览: 16
根据您的要求,我可以提供以下 SQL 语句:
```
SELECT trans1.user_id, trans2.user_id
FROM transactions AS trans1
JOIN transactions AS trans2
ON trans1.trans_id < trans2.trans_id AND trans1.user_id != trans2.user_id
WHERE TIMESTAMPDIFF(MINUTE, trans1.trans_time, trans2.trans_time) <= 10
GROUP BY trans1.user_id, trans2.user_id
HAVING COUNT(DISTINCT trans1.user_id, trans2.user_id) >= 6;
```
这个 SQL 语句将从 transactions 表中选择两个不同的用户,这两个用户之间的交易时间差小于等于 10 分钟,并且这两个用户之间的不同交易对手至少有 6 个。其中,trans_id 是交易的唯一标识符,trans_time 是交易时间,user_id 是交易的用户 ID。
相关问题
写一段sql 条件一:累计6次及以上交易对手为不同户名,条件二:第一笔与第六笔时间差在10分钟内
假设我们有一个表格叫做transactions,包含了账户名(account_name)、交易对手户名(counterparty_name)和交易时间(transaction_time)等字段,那么可以使用以下SQL语句进行筛选:
```
SELECT account_name
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY account_name ORDER BY transaction_time) AS row_number,
account_name,
counterparty_name,
transaction_time
FROM transactions
) AS subquery
WHERE row_number <= 6 -- 筛选前六笔交易记录
GROUP BY account_name
HAVING COUNT(DISTINCT counterparty_name) >= 6 -- 筛选交易对手户名不同的账户数量大于等于6
AND DATEDIFF(minute, MIN(transaction_time), MAX(transaction_time)) <= 10 -- 筛选第一笔和第六笔交易记录之间的时间差小于等于10分钟
```
解释一下,首先使用子查询对每个账户名进行编号,然后筛选出前六笔交易记录,并使用GROUP BY子句对账户名进行分组。然后使用HAVING子句筛选出交易对手户名不同的账户数量大于等于6的账户名。最后,使用DATEDIFF函数计算第一笔和第六笔交易记录之间的时间差,并筛选出时间差小于等于10分钟的账户名。其中,COUNT(DISTINCT counterparty_name)表示计算不同交易对手户名的数量。
写一段sql 条件一:累计6次及以上交易对手为不同户名,条件二:其中6交易,时间差在10分钟内
根据您的要求,我可以提供以下 SQL 语句:
```
SELECT user_id1, user_id2
FROM (
SELECT
trans1.user_id AS user_id1,
trans2.user_id AS user_id2,
COUNT(DISTINCT trans1.user_id, trans2.user_id) AS num_transactions,
MAX(trans2.trans_time) AS max_trans_time
FROM transactions AS trans1
JOIN transactions AS trans2
ON trans1.trans_id < trans2.trans_id AND trans1.user_id != trans2.user_id
WHERE TIMESTAMPDIFF(MINUTE, trans1.trans_time, trans2.trans_time) <= 10
GROUP BY trans1.user_id, trans2.user_id
HAVING COUNT(DISTINCT trans1.user_id, trans2.user_id) >= 6
) AS temp_table
WHERE num_transactions >= 6 AND TIMESTAMPDIFF(MINUTE, MIN(max_trans_time), MAX(max_trans_time)) <= 10;
```
这个 SQL 语句首先找到所有满足条件一的交易对,即累计6次及以上交易对手为不同户名的交易对,并计算它们的交易次数和最后一笔交易的时间。然后,它从这些交易对中找到交易次数达到6次及以上,且这6笔交易的时间差都在10分钟内的交易对。其中,trans_id 是交易的唯一标识符,trans_time 是交易时间,user_id 是交易的用户 ID。