根据特定条件查找重复值

Find duplicate values based on specific criteria

如果这个问题已经得到回答,我提前道歉。我对 SQL 还是很陌生。

我有一个包含客户数据的数据库。

数据库中的每一行都包含一个 customer_number 和一个 end_record_date(如果客户仍然活跃,则为过去的日期或“00:00:00”)。

我需要找到在数据库中至少出现两次的所有客户行(因此他们的 customer_number 至少出现在两行中)。但是我只想获取特定的行,如果 customer_number 它们在至少两行上处于活动状态(因此 end_record_date 的值对于该特定客户需要是 '00:00:00'至少两行)。

这就是我要查找的内容:

row_id customer_number end_record date
1 12345 '00:00:00'
346 7568 '2021-01-01'
89 7568 '00:00:00'
1287 12345 '00:00:00'

在上面的示例中,我希望返回第 1 行和第 1287 行,因为它们符合我的条件。 rowid 89 和 346 不符合我的标准

我将如何处理这件事?

我在 .sd3b 数据库上使用 sqlitestudio

customer_number分组,在HAVING子句中设置条件,即可得到想要的customer_number

SELECT customer_number
FROM tablename
GROUP BY customer_number
HAVING SUM(end_record_date = '00:00:00') >= 2;

要获取 table 中满足条件的所有行,请使用运算符 IN:

SELECT *
FROM tablename
WHERE customer_number IN (
  SELECT customer_number
  FROM tablename
  GROUP BY customer_number
  HAVING SUM(end_record_date = '00:00:00') >= 2
);

参见demo