我有以下数据(产品及其价格和价格日期):
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查询应该如何?
答案 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