如何解决“按组加入内部”问题

时间:2019-05-20 19:47:24

标签: sql oracle group-by inner-join

尝试运行查询以不拉回重复的行。目前,在运行此脚本时,我从Oracle收到一条错误消息,说

  

“ ORA-00979:不是GROUP BY表达式”

试图删除不同的选择行。

SELECT QUEUE_NAME, ITEMS_IN_QUEUE, CREATION_USR_ID
  FROM IN_WF_QUEUE B
  INNER JOIN IN_WF_ITEM A
     ON A.QUEUE_ID = B.QUEUE_ID    
    AND B.QUEUE_NAME LIKE '__________ %'       
    AND (A.QUEUE_START_TIME < (select sysdate from DUAL)-1000)    
  GROUP BY B.QUEUE_ID;

在此问题上,谢谢您的帮助。

1 个答案:

答案 0 :(得分:2)

如果要删除重复项,为什么不使用DISTINCT?这比使用没有任何聚合的GROUP BY更自然。

SELECT DISTINCT
       queue_name, items_in_queue, creation_usr_id
  FROM in_wf_queue b
  INNER JOIN in_wf_item A
     ON A.queue_id = b.queue_id    
    AND b.queue_name LIKE '__________ %'       
    AND A.queue_start_time < sysdate - 1000;

此外,也无需从双重选择SYSDATE;如我的示例所示,它是可以独立使用的功能。请注意,它同时返回日期和时间,因此-也许您想通过截断时间部分来删除时间部分,即使用trunc(sysdate)。减去1000意味着“ 天前”;只是为了避免可能的混乱。