首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL价格调度,选择最后一个时间戳<= UTC_TIMESTAMP()

SQL价格调度,选择最后一个时间戳<= UTC_TIMESTAMP()
EN

Stack Overflow用户
提问于 2018-07-07 04:40:43
回答 1查看 49关注 0票数 -2

我有一张叫product_pricing的桌子。

在这里,我可以为每个ID添加多个价格。区别它们的是product_pricingtimestamp_valid...it是我用来提前安排价格变化的工具。

代码语言:javascript
复制
    SELECT 
        `products`.`wo_id`,
        `products`.`fty_id`,
        `products`.`price` AS price1,

        `product_attributes`.`fty_id`,
        `product_attributes`.`cat_id`,
        `product_attributes`.`design_id`,
        `product_attributes`.`season_id`,

        `products_u_ids`.`u_id`,
        `products_u_ids`.`link_id`,

        `product_designs`.`design_id`,
        `product_designs`.`brand_id`,

        COALESCE(`product_pricing`.`u_id`, NULL) AS price2_u_id,
        COALESCE(`product_pricing`.`currency`, NULL) AS price2_currency,
        COALESCE(`product_pricing`.`price`, NULL) AS price2,
        COALESCE(`product_pricing`.`formula_id`, NULL) price2_formula_id,
        COALESCE(`product_pricing`.`vat_calculated`) AS price2_vat_calculated,
        COALESCE(`product_pricing`.`vat_id`, NULL) AS price2_vat_id,
        COALESCE(`product_pricing`.`timestamp_valid`, NULL) price2_timestamp_valid, 

        COALESCE(`product_price_formulas`.`formula_id`, NULL) AS price2_formula_id,
        COALESCE(`product_price_formulas`.`formula`, NULL) AS price2_formula,

        COALESCE(`global_vat_tariffs`.`vat_id`, NULL) AS price2_vat_id,
        COALESCE(`global_vat_tariffs`.`percentage`, NULL) AS price2_vat_tariff

    FROM `products`

    LEFT JOIN `product_attributes`
        ON `products`.`fty_id` = `product_attributes`.`fty_id`

    LEFT JOIN `products_u_ids`
        ON `product_attributes`.`fty_id` = `products_u_ids`.`link_id`

    LEFT JOIN `product_designs` 
        ON `product_attributes`.`design_id` = `product_designs`.`design_id`

    LEFT JOIN `product_pricing`
        ON `products_u_ids`.`u_id` = `product_pricing`.`u_id`

    LEFT JOIN `product_price_formulas` 
        ON `product_pricing`.`formula_id` = `product_price_formulas`.`formula_id`

    LEFT JOIN `global_vat_tariffs` 
        ON `product_pricing`.`vat_id` = `global_vat_tariffs`.`vat_id`

         LEFT OUTER JOIN (
            SELECT `product_pricing`.`u_id`, MAX(`timestamp_valid`) AS MaxDate
            FROM `product_pricing`
            WHERE `product_pricing`.`timestamp_valid` <= UTC_TIMESTAMP
            GROUP BY `product_pricing`.`u_id`
        ) AS temp ON temp.u_id = `product_pricing`.`u_id` AND temp.MaxDate = `product_pricing`.`timestamp_valid`

    WHERE `products`.`wo_id` IN ('028284', '018305', '031536')

上面的SQL返回给定ID的所有行,而不只是返回product_pricing.

LEFT OUTER JOIN中出现问题。

这个SQL做的另一件事是,当没有为price2设置任何东西时,它不应该破坏脚本,而只是为price2返回NULL。我正在使用COALESCE来解决这个问题。

这就是我得到的:

这就是我应该得到的:

假设查询日期为2018-5-7。

有什么想法可以用LEFT OUTER JOIN解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2018-07-07 05:28:19

您正在对包含您提到的时间戳过滤器的子查询使用LEFT JOIN操作。左连接保留与其ON条件不匹配的行。您可以在该子查询上尝试一个普通的INNER连接;内部连接不会保留与on条件匹配的行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51217335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档