2017-07-09 107 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 
相關問題