首页 文章

从每个商店的产品价格表中获取产品的最低价格

提问于
浏览
1

我正在 Build 一个网站来比较不同商店之间的产品价格 . 我创建了一个搜索功能,我想显示当前的最低价格,这是我有点卡住的地方 .

我有一个表 Products 与基本信息和一个表 product_store 与不同商店的奖品为不同的产品 . 下面是这些表的数据库的基本模式:

+-----------+   +---------------+
| products  |   | product_store |
+-----------+   +---------------+
| id        |   | product_id    |
| name      |   | store_id      |
+-----------+   | price         |
                | created_at    |
                +---------------+

product_store 表具有相同 product_idstore_id 的多个价格,因此我可以创建价格历史记录 .

现在我想创建一个查询来获取所有产品及其目前的最低价格 . 所以,你拿每个商店的价格最高 created_at ,从这个集合我想得到最低 Value .

这是我到目前为止所尝试的:

select products.*, prices.price 
from products
left join (
    SELECT p1.product_id, min(p1.price) as price, p1.created_at 
    FROM product_store p1 
    WHERE p1.created_at = (SELECT max(created_at) FROM product_store p2 WHERE p2.store_id = p1.store_id
) as prices
on prices.product_id = products.id

我搜索每个商店和产品的最高 created_at 并获得这些行的最低价格 . 然而,这会产生一些非常奇怪的结果,其中价格在产品之间混淆,而某些产品的价格在结果中没有任何价格 .

有人可以帮助我为这个问题创建一个好的查询吗?

提前致谢 . :)

1 回答

  • 1

    这是一种方法 . 它聚合 product_store 表以获取每个商店的最大创建日期 . 然后它将它连接回该表以获取 price 并最终在外部查询中进行聚合:

    select p.*, min(ps.price)
    from products p left join
         (select ps.product_id, ps.store_id, max(created_at) as maxca
          from product_store ps
          group by ps.product_id, ps.store_id
         ) pssum
         on pssum.product_id = p.id left join
         product_store ps
         on ps.product_id = pssum.product_id and
            ps.store_id = pssum.store_id and
            ps.created_at = pssum.maxca
    group by p.id;
    

    您的 product_store 表是一个缓慢变化的维度的示例 . 如果使用 eff_dateend_date (生效日期和结束日期)列进行设置,则查询将更容易编写,并且在性能方面可能更有效 .

相关问题