Oracle:从同一个表中选择值(JOIN)

时间:2017-11-09 13:09:32

标签: sql oracle select join

我需要从此表格中选择价值列表中NDI的值和DATE_ISSUE = DATE_ISSUE_MAX列表中每个值的NDI

我有这张桌子:

| NDI | DATE_ISSUE |

执行时:

SELECT NDI
FROM OM_DB.FT_PFS_SBC_TICKETS
WHERE NDI in ('0556254201','0559592626')
AND DATE_ISSUE=(
    SELECT MAX(DATE_ISSUE) 
    FROM OM_DB.FT_PFS_SBC_TICKETS
);

我得到NDI EMPTY

| NDI |

而不是:

| NDI | DATE_ISSUE |

4 个答案:

答案 0 :(得分:1)

虽然还有其他方法,但您需要这种方法的相关子查询:

select t.NDI
from OM_DB.FT_PFS_SBC_TICKETS t
where t.NDI in ('0556254201', '0559592626') and
      t.DATE_ISSUE = (SELECT MAX(t2.DATE_ISSUE)
                      FROM OM_DB.FT_PFS_SBC_TICKETS t2
                      WHERE t2.NDI = t.NDI
                     );

答案 1 :(得分:1)

Yous应该比较与每个NDI相关的值

  select NDI
  from OM_DB.FT_PFS_SBC_TICKETS
  where NDI in ('0556254201','0559592626')
  and (NDI, DATE_ISSUE)  =(SELECT NDI, MAX(DATE_ISSUE) 
            FROM OM_DB.FT_PFS_SBC_TICKETS GROUP BY NDI);

  select T1.NDI
  from OM_DB.FT_PFS_SBC_TICKETS T1
  INNER JOIN ( SELECT NDI, MAX(DATE_ISSUE)  my_date
            FROM OM_DB.FT_PFS_SBC_TICKETS 
            GROUP BY NDI ) T2 on T2.NDI =  T1.NDI AND T2.my_date = T1.DATE_ISSUE

答案 2 :(得分:0)

对于NDI max(DATE_ISSUE),该表的31/10/170559321162。对于您提供的NDI,没有最大日期的条目。

您还应将in子句添加到子查询中或使其成为相关查询

答案 3 :(得分:0)

实际上这个查询可以像这样简化:

SELECT NDI, MAX(DATE_ISSUE) 
FROM OM_DB.FT_PFS_SBC_TICKETS WHERE NDI in('0556254201', '0559592626') GROUP BY NDI;