获取过去x天内价格相同的产品

1wnzp6jl  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(304)

我想在mysql上取那些连续5天报相同价格的产品。我已附上样本数据供您参考以下。

PID Price   Date
P1  10  25-09-2018
P1  10  24-09-2018
P1  10  23-09-2018
P1  10  22-09-2018
P1  10  21-09-2018
P2  25  25-09-2018
P2  25  24-09-2018
P2  30  23-09-2018
P2  25  22-09-2018
P2  25  21-09-2018
P3  50  25-09-2018
P3  48  22-09-2018
P4  15  23-09-2018
P4  15  21-09-2018

所需输出应为

PID Price
P1  10
P4  15

提前谢谢。

qyswt5oh

qyswt5oh1#

使用示例数据,可以尝试类似于下一个伪mysql查询的查询:

SELECT
    Column_PID,
    Column_Price,
FROM
    the_table
WHERE
    Column_Date >= (NOW() - INTERVAL 4 DAY)
GROUP BY
    Column_PID, Column_Price
HAVING count(Column_Date) >= 5
vngu2lb8

vngu2lb82#

确定每种产品的“上一个价格” PID 以及 date (前一天的价格),使用相关子查询。
只考虑过去5天的数据(这可以使其变为变量)。
在上使用派生表和分组 PID ,过滤器(使用 Having 条款),其中 MIN 以及 MAX 变化的最大值是0。
使用以下查询:

SELECT inner_nest.PID, 
       MAX(inner_nest.Price) AS Price 
FROM 
(
  SELECT t1.PID, t1.Price, 
         (SELECT t2.Price 
          FROM your_table AS t2 
          WHERE t2.PID = t1.PID 
            AND t2.date < t1.date 
          ORDER BY t2.date DESC LIMIT 1) AS previous_price  
  FROM your_table AS t1 
  WHERE DATEDIFF( NOW(), t1.date ) < 5
) AS inner_nest 
GROUP BY inner_nest.PID 
HAVING MIN(inner_nest.Price - inner_nest.previous_price) = 0 
   AND MAX(inner_nest.Price - inner_nest.previous_price) = 0

相关问题