使用特定逻辑从加入 Table 中获取最大值

Getting Max Value From Joined Table With Certain Logic

这是我的 table 关系 :

tbl_product
-----------
product_id

tbl_product_price
-----------------
price_id
price_product_id (FK)
price_normal 
price_discount
price_disc_valid_from_date 
price_disc_valid_to_date

我想查询 tbl_product,按其最高价格 DESC 排序,必须首先验证它。如果折扣日期仍然有效(当前日期在 price_disc_valid_from_dateprice_disc_valid_to_date 之间),则获取 price_discount。如果无效,则得到 price_normal。之后我需要获得最高价格(来自 price_discountprice_normal),然后按该最高价格订购。

this 这样的大多数问题只是如何 select 最大列,不需要首先对连接的 table.

进行验证

我的问题是,该查询的 postgres sql 语句是什么?谢谢

[编辑]

我卡在 selecttable tbl_product_price 的最高价格,但不知道如何加入 tbl_product

SELECT 
    pr.price_id, pr.product_price_id, 
    CASE WHEN current_date BETWEEN pr.price_disc_valid_from_date AND pr.price_disc_valid_to_date 
        THEN pr.price_discount 
        ELSE pr.price_normal END AS price 
    FROM tbl_product_price pr 
    WHERE pr.price_product_id = 316 
    GROUP BY pr.price_id, pr.price_product_id 
    ORDER BY price DESC 
    LIMIT 1;

你能做这样的事吗:

SELECT
    tbl_tbl_product.price_product_id,
    tblMax.MaxPrice
FROM
    tbl_tbl_product
    JOIN
    (
        SELECT
            tbl_product_price.price_product_id, 
            MAX(
                CASE 
                    WHEN now() BETWEEN
                               tbl_product_price.price_disc_valid_from_date 
                               AND tbl_product_price.price_disc_valid_to_date
                    THEN tbl_product_price.price_discount
                    ELSE tbl_product_price.price_normal
                END
            ) AS MaxPrice  
        FROM
            tbl_product_price
        GROUP BY
            tbl_product_price.price_product_id
    ) as tblMax
    ON tblMax.price_product_id=tbl_tbl_product.product_id
ORDER BY
    tblMax.MaxPrice DESC

如果我对您的逻辑理解正确,此查询应该return 产品按产品的最高价格订购:

SELECT
  tp.product_id
FROM
  tbl_product tp INNER JOIN tbl_product_price tpp
  ON tb.product_id = tpp.price_product_id
GROUP BY
  tp.product_id
ORDER BY
  MAX(CASE WHEN current_date BETWEEN tpp.price_disc_valid_from_date
                             AND tpp.price_disc_valid_to_date THEN
      tpp.price_discount
    ELSE
      tpp.price_normal END) DESC