Oracle 使用sum、group和subquery获取上次活动

Oracle 使用sum、group和subquery获取上次活动,oracle,logic,subquery,Oracle,Logic,Subquery,有人能帮我吗?我想从我的表格中查询,目的是显示哪些员工销售超过100件。我已经完成了这个查询,并且工作了 但是当我想显示每个员工(销售超过100件商品的员工)的最后销售时间时,问题就出现了 我有像这样的桌子 no employee_id name pieces sl_time ---|-------------|-------------|--------|---------- 1 | 1 | bungdito | 60 | 20

有人能帮我吗?我想从我的表格中查询,目的是显示哪些员工销售超过100件。我已经完成了这个查询,并且工作了

但是当我想显示每个员工(销售超过100件商品的员工)的最后销售时间时,问题就出现了

我有像这样的桌子

no   employee_id   name          pieces   sl_time
---|-------------|-------------|--------|----------
1  |     1       | bungdito    | 60     | 2012-03-29 22:20
2  |     1       | bungdito    | 40     | 2012-03-05 18:00
3  |     1       | bungdito    | 50     | 2012-02-18 08:00
4  |     2       | addheat     | 120    | 2012-02-12 09:30
5  |     3       | angga       | 20     | 2012-01-18 10:45
6  |     4       | dimas       | 50     | 2012-01-01 08:30
当我使用这样的查询时

select * from 
( 
  select EMPLOYEE_ID, NAME, sum(PIECES) PIECES from 
  ( 
    select EMPLOYEE_ID, NAME, PIECES
    from DB_SCHEMA.TBL_SALES 
  )  
  group by EMPLOYEE_ID, NAME
) where PIECES > 100
我得到了这个正确的结果

 employee_id   name          pieces 
-------------|-------------|--------
     1       | bungdito    | 150    
     2       | addheat     | 120    
select * from 
( 
  select EMPLOYEE_ID, NAME, sum(PIECES) PIECES, SL_TIME

  ( 
    select EMPLOYEE_ID, NAME, PIECES,(select max(WAKTU) SL_TIME from DB_USER.TR_PELANGGARAN where TB_SALES.EMPLOYEE_ID = EMPLOYEE_ID from TB_SALES) SL_TIME
    from DB_SCHEMA.TBL_SALES 
  )  
  group by EMPLOYEE_ID, NAME, SL_TIME
) where PIECES > 100
以上结果是正确的

但是我需要的完成每个员工的最后一次交易时间

我试图进行查询,但仍然不正确

 employee_id   name          pieces 
-------------|-------------|--------
     1       | bungdito    | 150    
     2       | addheat     | 120    
select * from 
( 
  select EMPLOYEE_ID, NAME, sum(PIECES) PIECES, SL_TIME

  ( 
    select EMPLOYEE_ID, NAME, PIECES,(select max(WAKTU) SL_TIME from DB_USER.TR_PELANGGARAN where TB_SALES.EMPLOYEE_ID = EMPLOYEE_ID from TB_SALES) SL_TIME
    from DB_SCHEMA.TBL_SALES 
  )  
  group by EMPLOYEE_ID, NAME, SL_TIME
) where PIECES > 100
使用该查询时,我仍然得到错误的结果(请参见bungdito和addheat之间的sl_时间相同),如:

我需要的是如下所示:

employee_id   name          pieces   sl_time
-------------|-------------|--------|----------
     1       | bungdito    | 150    | 2012-03-29 22:20
     2       | addheat     | 120    | 2012-02-12 09:30
试试这个:

  select EMPLOYEE_ID, NAME, sum(PIECES) PIECES, MAX(SL_TIME)
  from DB_SCHEMA.TBL_SALES   
  group by EMPLOYEE_ID, NAME
  having sum(PIECES) > 100

太棒了,这很有效。。我告诉过你如果我是oracle的新手:pI不认为嵌套查询是必要的。此查询与原始查询不等价。在应用WHERE子句之前,取总和和最后时间。解决办法很简单。只需将WHERE子句移动到子查询中。MAX(B.SL_TIME)中的B是什么意思?当我删除[having pieces>100]时,它就起作用了,当[having pieces>100]时,我得到了错误“nota GROUP BY expression.”。。为什么?啊哈,你忘记了[总数(件数)>100]中的总数是对的,我忘了是甲骨文。现在问题解决了。请注意,使用这两个聚合函数不需要子查询。