(SQL)我希望从给定的表中输出特定的行 Userid some\u other\u id phn\u id date1 date2 date3 date4 3211322 09-DEC-15 31-DEC-99 01-JAN-00 9999年12月31日 3 22 1322 09-DEC-15 31-DEC-99 01-JAN-00 9999年12月31日 4 23 1322 21-AUG-15 25-AUG-06 01-OCT-03 1999年12月31日 424132221-AUG-1531-DEC-9925-AUG-0631/12/9999 5 22 1322 09-DEC-15 31-DEC-99 01-JAN-00 9999年12月31日 5 22 1322 01-10-03 25-AUG-06 01-JAN-00 9999年12月31日 6 23 1321 21-AUG-15 25-AUG-06 01-OCT-03 1999年12月31日 624132221-AUG-15 31-DEC-99 25-AUG-06 31/12/9999

(SQL)我希望从给定的表中输出特定的行 Userid some\u other\u id phn\u id date1 date2 date3 date4 3211322 09-DEC-15 31-DEC-99 01-JAN-00 9999年12月31日 3 22 1322 09-DEC-15 31-DEC-99 01-JAN-00 9999年12月31日 4 23 1322 21-AUG-15 25-AUG-06 01-OCT-03 1999年12月31日 424132221-AUG-1531-DEC-9925-AUG-0631/12/9999 5 22 1322 09-DEC-15 31-DEC-99 01-JAN-00 9999年12月31日 5 22 1322 01-10-03 25-AUG-06 01-JAN-00 9999年12月31日 6 23 1321 21-AUG-15 25-AUG-06 01-OCT-03 1999年12月31日 624132221-AUG-15 31-DEC-99 25-AUG-06 31/12/9999,sql,oracle,Sql,Oracle,我想要的是: 我想要所有的userid/行 某些用户id与同一用户id不匹配 phn_id应该是1322 在满足上述两个条件后,我想检查是否有任何日期列对于同一个userid彼此不匹配。 结果:在上面的示例中,我希望用户ID 4的输出为date2和date3不匹配 更新:我已经更新了样本数据,以便进一步澄清。 我仍在期待结果userid 4,因为其余的都不满足条件。 说明:- 用户id 3:日期匹配。(我希望不同的其他id有不同的日期)。 用户id 5:某些\u其他\u id相同。 Userid

我想要的是:

  • 我想要所有的userid/行
  • 某些用户id与同一用户id不匹配
  • phn_id应该是1322
  • 在满足上述两个条件后,我想检查是否有任何日期列对于同一个userid彼此不匹配。 结果:在上面的示例中,我希望用户ID 4的输出为date2和date3不匹配
  • 更新:我已经更新了样本数据,以便进一步澄清。 我仍在期待结果userid 4,因为其余的都不满足条件。
    说明:-
    用户id 3:日期匹配。(我希望不同的其他id有不同的日期)。
    用户id 5:某些\u其他\u id相同。
    Userid 6:phn_id不同


    对不起,如果我把你们搞糊涂了。如果需要任何其他细节,请告诉我

    您可以使用
    not exists
    子句并在那里编写您的条件,或者使用一些分析函数来计算发生次数,然后过滤它们。带有
    的示例SQL不存在

    select t1.*
      from t t1
      where userid <> some_other_id and phn_id = 1322
        and not exists (select 1 from t t2 
                         where t1.rowid <> t2.rowid and t1.userid = t2.userid 
                           and t1.date1 = t2.date1 and t1.date2 = t2.date2 
                           and t1.date3 = t2.date3 and t1.date4 = t2.date4 ) 
    
    如果只运行内部查询,您可以看到,对于每个用户的id:
    cnt\u phn
    1322号电话的数量,
    cnt\u id
    -此用户的不同其他id的数量和
    cnt\u dt
    -计算每个元组的日期。 外部查询根据您的条件筛选数据。根据您更新的示例数据,它仅显示用户4,如预期的那样。如果发现任何问题,此查询可能需要进行调整,但这里有两种实现目标的方法:
    exist
    和分析函数。希望这有帮助

    测试数据:

    create table t (Userid number(3), some_other_id number(3), phn_id number(6), date1 date, date2 date, date3 date, date4 date);
    insert into t values (3, 21, 1322, date '2015-12-09', date '1999-12-31', date '2000-01-01', date '9999-12-31');
    insert into t values (3, 22, 1322, date '2015-12-09', date '1999-12-31', date '2000-01-01', date '9999-12-31');
    insert into t values (4, 23, 1322, date '2015-08-21', date '2006-08-25', date '2003-10-01', date '9999-12-31');
    insert into t values (4, 24, 1322, date '2015-08-21', date '1999-12-31', date '2006-08-25', date '9999-12-31');
    insert into t values (5, 22, 1322, date '2015-12-09', date '1999-12-31', date '2000-01-01', date '9999-12-31');
    insert into t values (5, 22, 1322, date '2003-10-01', date '2006-08-25', date '2000-01-01', date '9999-12-31');
    insert into t values (6, 23, 1321, date '2015-08-21', date '2006-08-25', date '2003-10-01', date '9999-12-31');
    insert into t values (6, 24, 1322, date '2015-08-21', date '2015-12-31', date '2006-08-25', date '9999-12-31');
    
    输出:

    USERID SOME_OTHER_ID  PHN_ID DATE1       DATE2       DATE3       DATE4
    ------ ------------- ------- ----------- ----------- ----------- -----------
         4            23    1322 2015-08-21  2006-08-25  2003-10-01  9999-12-31
         4            23    1322 2015-08-21  1999-12-31  2006-08-25  9999-12-31
    

    为了澄清您的问题,请发布您的表结构、根据表结构的一些示例数据、该数据所需的结果、您迄今为止的尝试以及代码中存在的问题。在这里,您可以在上找到一些有用的内容,我已经发布了表代码片段。请运行代码片段并检查表结构和示例数据。您好,我不想像您在这里所做的“userid some_other_id”那样将userid与其他id进行比较。我更愿意使用一个用户id,并将其与其他用户id进行比较。例如:对于userid 4,我首先要检查some_other_id(即,您所使用的23,23)是否匹配。如果不是,那么我只想检查其他条件。非常感谢。你的询问帮了大忙。:)只是需要一点帮助。这个查询可以优化吗?对我来说,执行这个查询大约需要11-12分钟。
    USERID SOME_OTHER_ID  PHN_ID DATE1       DATE2       DATE3       DATE4
    ------ ------------- ------- ----------- ----------- ----------- -----------
         4            23    1322 2015-08-21  2006-08-25  2003-10-01  9999-12-31
         4            23    1322 2015-08-21  1999-12-31  2006-08-25  9999-12-31