Oracle 使用sum、group和subquery获取上次活动
有人能帮我吗?我想从我的表格中查询,目的是显示哪些员工销售超过100件。我已经完成了这个查询,并且工作了 但是当我想显示每个员工(销售超过100件商品的员工)的最后销售时间时,问题就出现了 我有像这样的桌子Oracle 使用sum、group和subquery获取上次活动,oracle,logic,subquery,Oracle,Logic,Subquery,有人能帮我吗?我想从我的表格中查询,目的是显示哪些员工销售超过100件。我已经完成了这个查询,并且工作了 但是当我想显示每个员工(销售超过100件商品的员工)的最后销售时间时,问题就出现了 我有像这样的桌子 no employee_id name pieces sl_time ---|-------------|-------------|--------|---------- 1 | 1 | bungdito | 60 | 20
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]中的总数是对的,我忘了是甲骨文。现在问题解决了。请注意,使用这两个聚合函数不需要子查询。