我有一个3关系的数据库提供,产品和&分类。我试图找到所提供产品的最大数量的月份的那一天。我需要返回类别名称(CN),日期,最大报价数量(OD)和报价数量(PC)。
我有这个问题:
SELECT CN, MAX(PC)
FROM
(
SELECT c.nombre as CN, EXTRACT(DAY FROM o.fecha) as OD, count(o.id_producto_ofertado) AS PC
FROM ofertas o join (categorias c JOIN productos p ON c.id = p.categoria) on o.id_producto_ofertado = p.id
GROUP BY EXTRACT(DAY FROM o.fecha), c.nombre
)
GROUP BY CN
我认为它有效。但结果是与2个cols的关系:CN& MAX(PC)。如果我试着带上一天(OD),因为我需要它,使用:
SELECT CN, MAX(PC), OD
FROM
(
SELECT c.nombre as CN, EXTRACT(DAY FROM o.fecha) as OD, count(o.id_producto_ofertado) AS PC
FROM ofertas o join (categorias c JOIN productos p ON c.id = p.categoria) on o.id_producto_ofertado = p.id
GROUP BY EXTRACT(DAY FROM o.fecha), c.nombre
)
GROUP BY CN, OD
然后它返回3个cols关系:CN,MAX(PC)& OD。但是重复了类别名称(CN),我认为因为我需要按OD分组以便提取当天。因此,返回在31天中每一天都包含一行。
我只需要为每个类别名称添加一行,返回类别名称,具有最多商品数量和最多商品数量的月份日期。
我现在被困住了,因为我不知道该怎么办。感谢
答案 0 :(得分:2)
您可以使用row_number
选择要约金额最高的行:
select CustomerName
, OrderDate
, OfferCount
from (
select CustomerName
, OrderDate
, OfferCount
, row_number() over (partition by CustomerName
order by OfferCount desc) as rn
from (
select c.nombre as CustomerName
, EXTRACT(DAY FROM o.fecha) as OrderDate
, count(o.id_producto_ofertado) as OfferCount
FROM ofertas o
join categorias c
on o.id_producto_ofertado = p.id
join productos p
on c.id = p.categoria
group by
c.nombre
, EXTRACT(DAY FROM o.fecha)
) as GroupByDay
) as WithRowNumber
where rn = 1
row_number
的子查询可能没有必要,但我附近没有测试Oracle。