一张sql表 含有日期、账户字段 ,如何筛选出不同日期,账户相同数据
时间: 2023-04-04 14:03:03 浏览: 91
您好,您可以使用以下 SQL 语句来筛选出不同日期,账户相同的数据:
SELECT DISTINCT t1.账户, t1.日期
FROM 表名 t1
INNER JOIN 表名 t2 ON t1.账户 = t2.账户 AND t1.日期 <> t2.日期
ORDER BY t1.账户, t1.日期;
其中,表名为您所要查询的表名,账户和日期为表中的字段名。这个 SQL 语句会返回所有不同日期,账户相同的数据,并按照账户和日期的顺序进行排序。希望能够帮到您。
相关问题
sql 一个字段账户号有几个个账户号 每个账户因为不同日期 存在每个账户号有重复值,我想去掉重复的账户号 提取日期为最新的记录
可以使用窗口函数 ROW_NUMBER() 和 PARTITION BY 子句来实现对一个字段的去重,保留最新日期的记录。假设要对表中的 Account 字段进行去重,保留最新日期的记录,可以按照以下步骤操作:
1. 使用 ROW_NUMBER() 函数为每个账户号的记录进行编号,按照日期的倒序排列。
2. 在 PARTITION BY 子句中使用 Account 字段,将记录按照账户号进行分组。
3. 筛选出编号为 1 的记录,即为每个账户号中日期最新的记录。
例如,以下是一个示例代码:
```
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Account ORDER BY Date DESC) AS RowNum
FROM yourtable
) t
WHERE t.RowNum = 1;
```
这将对表 yourtable 进行按照 Account 字段的去重操作,保留最新日期的记录。
写一段SQL 筛选10分钟内存在6笔及以上不同交易对手户名的账户
假设我们有一个表格叫做transactions,包含了账户名(account_name)、交易对手户名(counterparty_name)和交易时间(transaction_time)等字段,那么可以使用以下SQL语句进行筛选:
```
SELECT account_name
FROM transactions
WHERE transaction_time >= DATEADD(minute, -10, GETDATE()) -- 筛选10分钟内的交易记录
GROUP BY account_name
HAVING COUNT(DISTINCT counterparty_name) >= 6 -- 筛选交易对手户名不同的账户数量大于等于6
```
解释一下,首先使用WHERE子句筛选出10分钟内的交易记录,然后使用GROUP BY子句对账户名进行分组,最后使用HAVING子句筛选出交易对手户名不同的账户数量大于等于6的账户名。其中,COUNT(DISTINCT counterparty_name)表示计算不同交易对手户名的数量。