mysql 根据更新记录列查找某个日期的值

7cwmlq89  于 2023-02-28  发布在  Mysql
关注(0)|答案(2)|浏览(145)

表格如下所示:

id  Product     Price   price_update_date
1   Product     21.99   2022-11-09 6:32:11
2   Product     22.99   2022-09-27 9:06:14
3   Product     19.99   2022-07-10 6:27:49
4   Product     18.99   2022-05-24 7:31:20
5   Product     17.98   2022-04-21 8:59:18
6   Product     17.99   2022-02-02 8:33:48
7   Product     19.99   2021-12-20 8:43:41
8   Product     18.99   2021-11-29 2:31:00
9   Product     19.99   2021-10-11 7:42:17
10  Product     19.98   2021-06-10 5:11:03
11  Product     19.99   2021-02-25 2:23:45

这里我只有价格更新记录。我需要找到在特定日期的价格。比如说,2022-10-01(10月1日)。在当前情况下如何执行它?
MySQL版本5.6.51

brccelvz

brccelvz1#

要检索单个产品,应:

SELECT *
FROM product_prices
WHERE price_update_date <= '2022-10-01'
AND Product  = 'Product'
ORDER BY price_update_date DESC
LIMIT 1;

或适用于所有产品:

SELECT pp.*
FROM product_prices pp
JOIN (
    SELECT Product, MAX(price_update_date) max_date
    FROM product_prices
    WHERE price_update_date <= '2022-10-01'
    GROUP BY Product
) t ON pp.Product = t.Product AND pp.price_update_date = t.max_date;
tnkciper

tnkciper2#

要在只有价格更新记录的情况下查找产品在特定日期的价格,您可以使用SQL查询查找在特定日期或之前的每个产品的最新更新记录,然后提取相应的价格值。以下是可实现此目的的查询示例:

SELECT Product, Price
FROM (
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY Product ORDER BY price_update_date DESC) AS rn
    FROM product_prices
    WHERE price_update_date <= '2022-10-01'
) AS t
WHERE rn = 1;

此查询首先对记录进行筛选,使其仅包含指定日期当天或之前的记录(本例中为“2022 -10-01”)。然后,它使用ROW_NUMBER()窗口函数,用于为其产品组中的每条记录分配等级,最新记录的等级为1。最后,它仅选择等级为1的记录,它将是每个产品在指定日期或之前的最新记录。
请注意,此查询假定每个产品至少有一条价格更新记录,并且数据集中没有空白或重叠的记录。如果有任何缺失或不完整的记录,此查询的结果可能不正确。此外,此查询假定price_update_date列存储为datetime数据类型。如果存储为字符串,您可能需要在WHERE子句中使用不同的格式说明符来正确地比较日期。

相关问题