首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mySQL在同一表中包含日期范围的字段

mySQL在同一表中包含日期范围的字段
EN

Stack Overflow用户
提问于 2012-10-11 13:39:18
回答 2查看 280关注 0票数 1

我有一张桌子

代码语言:javascript
复制
date      d_id    r_id  p_id  q_sold    onhand
2012-10-10  5       1   3025    3           10
2012-10-10  5       1   3022    12          20
2012-10-10  5       1   3023    15          33
2012-10-11  5       1   3025    3           10
2012-10-11  5       1   3022    12          20
2012-10-11  5       1   3023    15          33
2012-10-12  5       1   3025    3           10
2012-10-12  5       1   3022    12          20
2012-10-12  5       1   3023    15          33
2012-10-13  5       1   3025    3           10
2012-10-13  5       1   3022    12          20
2012-10-13  5       1   3023    15          33
2012-10-14  5       1   3025    3           10
2012-10-14  5       1   3022    12          10
2012-10-14  5       1   3023    15          33
2012-10-15  5       1   3025    3           5
2012-10-15  5       1   3022    12          5
2012-10-15  5       1   3023    15          33

我想要得到q_sold除以5天内现有量的平均值的结果,同时显示特定日期的其他数据,如2012-10-15。

我创建了一个查询

代码语言:javascript
复制
set @stdate = '2012-10-10';
set @endate = '2012-10-15';
SELECT date, d_id,r_id,p_id,q_sold,onhand,qty_sold/AVG(qty_onhand) 
FROM stp_vwsales_info_tots 
WHERE date BETWEEN @stdate and @endate and d_id=5 
GROUP BY d_id,r_id,p_id

但显示的结果不正确,它显示的是2012-10-10而不是2010-10-15的数据

代码语言:javascript
复制
date          d_id r_id p_id  q_sold    onhand  avg
2012-10-10      5   1   3022    12      20      0.7579
2012-10-10      5   1   3023    15      33      0.4545
2012-10-10      5   1   3025    3       10      0.3273

有人能帮上忙吗?

EN

回答 2

Stack Overflow用户

发布于 2012-10-11 13:49:40

使用@stdate和@endate作为DATE(@stdate/@endate)DATE_FORMAT(@stdate/@endate,'%Y-%m-%d'),否则必须通过MySQL将字符串转换为日期

票数 0
EN

Stack Overflow用户

发布于 2012-10-15 17:20:37

我想你要找的是一种叫做简单移动平均的东西。

为了计算这一点,你需要使用内联子查询-所以性能不会是最好的。

假设您想要计算前5天的平均值,尝试如下所示:

代码语言:javascript
复制
SELECT 
  date, d_id, r_id, p_id, q_sold, onhand, 
  ( SELECT q_sold/AVG(t2.onhand)
    FROM stp_vwsales_info_tots AS t2
    WHERE p_id=t1.p_id AND DATEDIFF(t1.date, t2.date) BETWEEN 0 AND 4
  ) AS 'moving_avg'
FROM stp_vwsales_info_tots AS t1
GROUP BY t1.p_id,t1.date
order by t1.date;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12832901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档