【问题标题】:Find duplicate values based on specific criteria根据特定条件查找重复值
【发布时间】:2021-12-27 13:25:51
【问题描述】:

如果这个问题已经得到解答,我很抱歉。我对 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 数据库上使用 sqlitetudio

【问题讨论】:

    标签: sql sqlite group-by having sql-in


    【解决方案1】:

    如果您按customer_number 分组并在HAVING 子句中设置条件,则可以获得您想要的customer_numbers:

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

    要获取表中所有符合条件的行,请使用运算符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

    【讨论】:

      猜你喜欢
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      相关资源
      最近更新 更多