我在使用MySQL查询时遇到问题,无法使用特定软件版本生成产品数量报告。
这是我的问题:
SELECT Count(ps.software_id) AS count, s.software_id FROM software s, product_software ps, products p WHERE s.software_id = ps.software_id AND p.product_id = ps.product_id AND p.product_name = 'ProdA' GROUP BY ps.software_id
麻烦的是,product_software表看起来像这样:
product_software_id product_id software_id
1 1 1
2 2 1
3 3 1
4 1 2
5 2 2
6 1 3
7 4 3
8 5 3
查询的当前输出是:
count software_id
3 1
2 2
3 3
正确(预期)输出应为:
count software_id
0 1
1 2
3 3
我只想在查询中包含最新(最高的product_software_id)条目。 (即software_id和product_id都应该是唯一的。)
答案 0 :(得分:2)
要获得特定产品的最高product_software_id,您必须先加入2个product_software表来过滤最后一个(您可以创建一个名为v_product_software的视图)
Select p1.* from product_software p1 left join product_software laster on p1.product_id = laster.product_id and p1.product_software_id < laster.product_software_id
where isnull(laster.product_software_id)
- &GT;此查询返回
product_software_id product_id software_id
3 3 1
5 2 2
6 1 3
7 4 3
8 5 3
之后,运行你的sql将返回(将product_software更改为v_product_software)
count software_id
0* 1
1 2
3 3
对于第1行,software_id = 1将包含id = 3的产品,但我认为产品名称与'ProdA'不同,因此结果将为0而不是1.
答案 1 :(得分:1)
谢谢你们,我找到了答案。这就是它可以帮助任何人前进:
select Count(counted) as count, software_id
from (select Max(ps.software_id) as counted,
Max(s.software_id) software_id,
from software s
inner join product_software ps
on s.software_id = ps.software_id
inner join products p
on p.product_id = ps.product_id
where p.product_name='ProdA'
group by p.product_id
) as counts
group by counted
答案 2 :(得分:0)
要获得每种产品的最高版本,只需按产品分组即可。
Select product_id, max(software_id)
From product_software
group by product_id
由此,按软件ID计算产品。
with v as
( select product_id, max(software_id) curr_ver
from product_software
group by product_id
)
select count(*), curr_ver
from v
group by curr_ver
order by curr_ver