获取分组结果的最后一个值 - Oracle SQL

时间:2017-11-21 14:17:50

标签: sql oracle sql-subselect

列出账单我想知道按ID分组的每个客户的销售量。 每个账单都有一个负责人(一个在桌面客户中的店员),所以我想拿起最后一张账单的人并将其记录在结果中。

结果应该是这样的: 客户 - 账单总和 - 最后一个账单的负责人。

由于Oracle没有“限制”选项(我们还没有12c),我必须使用Subselect。这意味着我无法比较客户的ID,因为它超出了范围(请参阅下面的代码)。 欢迎任何建议。

SELECT customer.NAME, SUM(bills.SUME), 
(SELECT responsibleP FROM 
    (SELECT responsibleP FROM bills b WHERE b.responsibleP = customer.id 
    order by asc billDate)
WHERE ROWNUM = 1)
FROM customer, bills
WHERE customer.id = bills.customerid    
GROUP BY customer.id;

在这种情况下, b.responsible 无法从customer表中获取 customer.id

请随意更改标题,我不是很擅长,对不起!

2 个答案:

答案 0 :(得分:3)

您应该能够使用MAX( column ) KEEP ( DENSE_RANK [FIRST|LAST] ORDER BY other_columns [ASC|DESC] )来获取同一列的最大值,该列也具有另一列的FIRSTLAST值。像这样:

SELECT c.NAME,
       SUM(b.SUME),
       MAX( b.respondibleP ) KEEP ( DENSE_RANK LAST ORDER BY b.billDate )
         AS lastResponsible
FROM customer c
     INNER JOIN bills b
     ON ( c.id = b.customerid )
GROUP BY c.id;

答案 1 :(得分:0)

在Oracle中使用KEEP LAST

SELECT
  c.name, 
  SUM(bills.sume), 
  MAX(b.responsibleP) KEEP (DENSE_RANK LAST ORDER BY b.billDate)
FROM customer c
JOIN bills b ON c.id = b.customerid    
GROUP BY c.id;