繁体   English   中英

如何删除一列中的所有重复项并仅返回 SQL 中下一列中具有日期的那些?

[英]How to delete all duplicates in one column and return only those that has date in next column in SQL?

我有一个包含 4+ 百万行和 2 列的表: 1. 电话号码 ( account ) 和上次活动时间 ( last_active )。 但是,并非所有帐户都有 last_active 日期,而是null 所以,我需要的是:

首先,从帐户列中删除所有重复项并返回 rest(我只需要不同的电话号码)。

其次,在返回所有不同的电话号码(帐户)时,仅返回具有日期(非空)的电话号码。

在此处输入图像描述

在此处输入图像描述

似乎是非常直接的 select 查询与聚合。 你试过什么,你遇到了什么错误或问题

SELECT Account, max(last_active) as Last_active
FROM TableName
WHERE last_active is not null
GROUP BY Account

也许你不想要最近的活跃......

所以也许:但这会显示重复的帐户,其中记录了所有“Last_active”日期......

SELECT Account, last_active
FROM TableName
WHERE last_active is not null
GROUP BY Account

您好,我刚刚在 MySQL 中制作了一个示例表,其中包含大约 200,000 条记录,其中一半是重复的。

以下查询效果很好。

SELECT * FROM TableName
WHERE last_active IS NOT NULL
AND 1 GROUP BY account

现在如果你想把它保存到一个新表中,你可以

CREATE TABLE newTableName as
SELECT * FROM TableName
WHERE last_active IS NOT NULL
AND 1 GROUP BY account

我会同意 xQbert 但是我会在 SELECT 之后添加一个 DISTINCT 以防万一帐户在同一日期激活两次(如果这是列的格式)并且两者都被记录

SELECT DISTINCT Account, max(last_active) as Last_active
FROM TableName
WHERE last_active is not null
GROUP BY Account

考虑下面的简单方法

select * from your_table
qualify count(*) over account = 1 
and countif(last_active is null) over account = 0
window account as (partition by account)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM