当两列的行相同而其他列的行不同时的SQL

时间:2016-05-26 15:56:49

标签: sql oracle

我有一个表,我试图过滤掉一个奇怪的方法。这是我的表

  PHONE      EFFDATE     ENDDATE
6093852442  8/15/2007   2/2/2008 23:59
**6093852442    5/9/2008    7/14/2009 23:59
6093852442  5/9/2008    12/31/2099**
5745378900  4/10/2012   5/21/2012 23:59
5745378900  2/4/2016    12/31/2099
7173643250  3/24/2008   3/21/2013 23:59
7173643250  3/22/2013   12/31/2099
**3097402606    12/4/2007   1/23/2011 23:59
3097402606  12/4/2007   12/31/2099**

每当Phone和EFFDATE相同且ENDDATE具有不同的值时,它只给出以下数据:

      PHONE      EFFDATE     ENDDATE
    6093852442  5/9/2008    7/14/2009 23:59
    6093852442  5/9/2008    12/31/2099
    3097402606  12/4/2007   1/23/2011 23:59
    3097402606  12/4/2007   12/31/2099

请让我知道如何做到这一点。谢谢

1 个答案:

答案 0 :(得分:0)

试试这个

SELECT   phone,
         effdate,
         enddate
FROM     my_table table1
WHERE    EXISTS (SELECT *
                 FROM   my_table table2
                 WHERE  table1.phone = table2.phone
                   AND  table1.effdate = table2.effdate
                   AND  table1.enddate <> table2.enddate)
ORDER BY phone,
         effdate,
         enddate;

我认为**个字符只表示哪些元素应该在输出中显示。