Mysql SQL Price Scheduling,选择最后一个时间戳,该时间戳

Mysql SQL Price Scheduling,选择最后一个时间戳,该时间戳,mysql,sql,mysqli,Mysql,Sql,Mysqli,我有一张叫做product_pricing的表格 在这里,我可以为每个ID添加多个价格。它们的区别在于产品定价。时间戳有效…我使用它提前安排价格更改 SELECT `products`.`wo_id`, `products`.`fty_id`, `products`.`price` AS price1, `product_attributes`.`fty_id`, `product_attributes`

我有一张叫做product_pricing的表格

在这里,我可以为每个ID添加多个价格。它们的区别在于产品定价。时间戳有效…我使用它提前安排价格更改

    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\u pricing.timestamp\u valid``您正在对包含您提到的时间戳筛选器的子查询使用左连接操作。左联接保留与其ON条件不匹配的行。您可以在该子查询上尝试普通的内部联接;内部联接不保留与ON条件匹配的行。

能否提供一些示例数据?@D-Shih请查看图片。问题是,它将返回给定ID的所有行。而不是仅返回一行,其中时间戳_valid@Borsn具有您声誉的人应该已经知道我们不应该将数据作为图像发布。在您的第一个屏幕截图中,我没有看到028284的price2有两个不同的值,您在产品定价表中有028284的两个条目吗?可能是因为您的日期/时间列包含,看起来像,微秒,但UTC时间戳不包含?因此,当我使用右外部联接时,它只显示包含price2的ID。对于内部联接,处理方式相同。这就是为什么我使用左外连接。但是,我的问题是,它显示给定ID的product_pricing中的所有行,而不是与时间戳条件匹配的1。