(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
说明:-
用户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