2017-07-09 58 views
1

我有两个MySQL表:Mysql的获得最小值,平均值和最新的两个表(产品,在产品,价格)

  • products与ID,姓名,联系
  • products-prices与ID,id_prod,价格,可用性和日期

在第二个,你可以看到我可以有更多的价格为相同的产品取决于更新的时间,我想要做的是有一个查询,告诉我最低价格,平均价格和最新价格。我可以在一个查询中获得前两个(最低和平均价格),在另一个查询中获得最新价格,但我不知道如何连接它们或者是否有其他方式。

我的第一个查询看起来像这样:

SELECT 
    `products`.id AS ids, `products`.name, `products`.link, 
    `products-prices`.id AS id_p, `products-prices`.price, 
    `products-prices`.availability, `products-prices`.date, 
    AVG(`products-prices`.price) AS medie, 
    MIN(`products-prices`.price) AS minim 
FROM 
    `products-prices` 
INNER JOIN 
    `products` ON `products`.id = `products-prices`.id_produs 
GROUP BY 
    ids 
ORDER BY 
    ids 

,第二个是:

SELECT * 
FROM `products-prices` 
WHERE date IN (SELECT DISTINCT MAX(date) max_date 
       FROM `products-prices` 
       GROUP BY id_produs) 

你能给我一个想法,如何将它们结合起来?非常感谢你!

(我不知道如何工会的工作,如果它的作品,我会尝试)

//编辑:我也有一个问题,我可以得到MIN,AVG值,而最新的入门在数据库中?

+0

不要使用“ - ”表/列身份标识。它肯定会造成严重破坏 – Strawberry

+0

我从基于类别名称的网站自动生成数据库,如www.something.com/video-cards/ - >视频卡和视频卡 - 价格(所以即使我切割了 - 从价格我仍然在类别名称)。我会尽力去做某件事,谢谢你的警告。 – Bobytza

回答

0

这是一个未经考验的解决方案,请让我知道它是否有助于

SELECT 
    `products`.id AS ids, `products`.name, `products`.link, 
    `products-prices`.id AS id_p, `products-prices`.price, 
    `products-prices`.availability, `products-prices`.date, 
    AVG(`products-prices`.price) AS medie, 
    MIN(`products-prices`.price) AS minim, 
    latest.`date` as latest_date, 
    latest.price as latest_price 
FROM 
    `products-prices` 
INNER JOIN 
    `products` ON `products`.id = `products-prices`.id_produs 
INNER JOIN 
    (select id_produs, price, `date` 
    from `products-prices` t1 
    where not exists (select 1 
         from `products-prices` t2 
         where t1.`date` < t2.`date` and t1.id_produs = t2.id_produs) 
    group by id_produs 
    ) latest  
ON 
    latest.id_produs = products.id 
GROUP BY 
    ids 
ORDER BY 
    ids 
+0

这个工程,非常感谢你! – Bobytza

+0

@Bobytza欢迎您。 –

0

你可以使用子查询的最大日期

select 
     `products`.id AS ids, 
     `products`.name, 
     `products`.link, 
     t.date, 
     t.price, 
     t.availability, 
     AVG(`products-prices`.price) AS medie, 
     MIN(`products-prices`.price) AS minim 

    from `products` 
    inner join `products-prices` ON `products`.id=`products-prices`.id_produs 
    inner join () 
    select id_produs, date, price, availability 
    from `products-prices` 
    where (id_produs, date) = (
    select id_produs, max(date) as max_date 
    from `products-prices` 
    group by id) t on t.id_produs = `products`.id_prod 
相关问题