MySQL:价格在过去7天内发生了变化

时间:2017-12-05 17:02:23

标签: mysql

我有以下数据(产品及其价格和价格日期):

prodId priceDate  price 
======+==========+=====
    1 |2017-11-24|  600 
    1 |2017-11-21|  600 
    1 |2017-11-18|  600 
    1 |2017-11-15|  500 
    1 |2017-11-05|  400 
    1 |2017-11-03|  400 
    2 |2017-11-11|  300

我需要一个指标(列chg),它会显示产品价格是否在过去7天内发生了变化。

prodId priceDate  price chg
======+==========+=====+===
    1 |2017-11-24|  600| N  
    1 |2017-11-21|  600| Y  
    1 |2017-11-18|  600| Y  
    1 |2017-11-15|  500| N  
    1 |2017-11-05|  400| N  
    1 |2017-11-03|  400| N  
    2 |2017-11-14|  300| N

这个SQL查询应该如何?

2 个答案:

答案 0 :(得分:1)

这未经过测试,但可能会给你一个想法。在过去7天内加入产品的所有行。计算不同的价格。如果计数为1,则价格没有变化。

SELECT p1.prodId, p1.priceDate, MAX(p1.price) AS price,
  CASE COUNT(DISTINCT p2.price) WHEN 1 THEN 'N' ELSE 'Y' END AS chg
FROM MyTable AS p1 
LEFT OUTER JOIN MyTable AS p2 
 ON p1.prodId = p2.prodId 
 AND p2.priceDate BETWEEN p1.priceDate - INTERVAL 7 DAY AND p1.priceDate
GROUP BY p1.prodId, p1.priceDate

答案 1 :(得分:1)

好的,我自己找到了解决方案(检查该特定产品COUNT()>0在过去7天p2.price!=p.price内是否至少有1 p2.priceDate BETWEEN p.priceDate - INTERVAL 7 DAY AND p.priceDate价格不同于p2.prodId=p.prodId当前价格SELECT prodId,priceDate,price, IF((SELECT COUNT(p2.price) FROM prices AS p2 WHERE p2.prodId=p.prodId AND p2.price!=p.price AND p2.priceDate BETWEEN p.priceDate - INTERVAL 7 DAY AND p.priceDate),'Y','N') AS chg FROM prices p ):

msvcrt

SQL Fiddle