【问题标题】:How to get selecting data from the last 7 existing days?如何获取过去 7 天的选择数据?
【发布时间】:2018-09-18 16:08:09
【问题描述】:

我的问题:我有价格和日期的表格。我需要有过去 7 天的平均价格。 例如:我有今天、昨天、30 天前、43 天前等的价格。我需要的不是过去 7 天的平均值,而是过去 7 天的平均值。

我的代码:

SELECT AVG(price) 
FROM table 
GROUP BY date  
ORDER BY date DESC LIMIT 7

但是我每天有 7 个平均价格。 也许有人有其他想法

【问题讨论】:

  • 日期类型是date还是datetime?如果是datetime,您可以尝试使用 CAST 将日期转换为日期。
  • 您使用的是哪个DBMS? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签postgresqloracledb2sql-server、...
  • 我用mysql。日期类型没有问题。我可以改变。
  • 也许SELECT AVG(price) FROM table WHERE (SELECT AVG(price) FROM table GROUP BY date ORDER BY date DESC LIMIT 7) 应该可以工作?
  • 没有。 #1242 - Subquery returns more than 1 row

标签: mysql sql


【解决方案1】:

使用子查询获取过去 7 天,获取这些日期中最早的日期,然后使用表格获取 join

SELECT AVG(price)
FROM table AS t1
JOIN (SELECT MIN(dateday) AS mindate
      FROM 
        (SELECT DATE(date) AS dateday
         FROM table
         GROUP BY dateday
         ORDER BY dateday DESC LIMIT 7
        ) AS x
      ) AS t2
ON t1.date >= t2.mindate

【讨论】:

  • 感谢您的回答。你的回答对我来说是最好的。非常感谢
【解决方案2】:

使用avg 函数和子查询

  select avg(price)
  from
    (SELECT date,price
     FROM table
     ORDER BY date desc limit 7
    ) as t

【讨论】:

  • 我不需要过去 7 天的平均价格。我需要过去 7 天的平均价格。例如。 2018-09-18, 2018-08-08, 2018-08-07, 2018-08-05, 2018-07-25, 2018-07-22, 2018-07-20, 因为这几天加价了.
  • 感谢您的回答。你的答案几乎是好的。我的代码中有过去 7 天的平均值。这是正确的。但我需要考虑到一天可能有几个价格。我忘记写了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多