【问题标题】:MySQL: price changed within last 7 daysMySQL:价格在过去 7 天内发生变化
【发布时间】:2017-12-05 17:02:22
【问题描述】:

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

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.5k 代表有这样的问题?
  • @sentinel 到目前为止我试过这个:select prodId,preisDatum,preis, (select preis from preise p2 where p2.prodId=p.prodId and p2.preisDatum<p.preisDatum order by preisDatum desc limit 1) from preise p 但这个查询显示的是上次价格 - 如果 7 天内有变化,则不会。
  • @davidbuzatto,好吧,也许我今天工作很累,看不到这个解决方案的简单性,或者你看不到问题的复杂性,所以请帮忙并提供解决方案
  • 所以@Sentinel 只是在评论,没有贡献。
  • @sbrbot 在我回复您时,其他两个用户已经提供了答案。

标签: mysql


【解决方案1】:

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

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

SQL Fiddle

【讨论】:

    【解决方案2】:

    这未经测试,但可能会给你一个想法。加入过去 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
    

    【讨论】:

      猜你喜欢
      • 2014-08-07
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 2018-08-17
      相关资源
      最近更新 更多