根据特定条件查找重复值
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。
如果这个问题已经得到回答,我提前道歉。我对 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。