首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个表之间的复杂MySQL查询

两个表之间的复杂MySQL查询
EN

Stack Overflow用户
提问于 2009-11-23 18:58:26
回答 1查看 635关注 0票数 1

我这里有一个非常复杂的查询,至少对我来说是这样。

这是一个包含汽车发布日期的表格(其中model_key = 320D):

代码语言:javascript
复制
+------------+-----------+
| date_key   | model_key |
+------------+-----------+
| 2003-08-13 | 320D      | 
| 2005-11-12 | 320D      |
| 2007-02-11 | 320D      | 
+------------+----------+

然后我有一个包含每日购买量的表(其中model_key = 320D):

代码语言:javascript
复制
+------------+-----------+-----------+
| date_key   | model_key | sal_quant |
+------------+-----------+ ----------+
| 2003-08-13 | 320D      | 0         |
| 2003-08-14 | 320D      | 1         |
| 2003-08-15 | 320D      | 2         |
| 2003-08-16 | 320D      | 0         |
...
| 2005-11-12 | 320D      | 2         |
| 2005-11-13 | 320D      | 0         |
| 2005-11-14 | 320D      | 4         |
| 2005-11-15 | 320D      | 3         |
... 
| 2007-02-11 | 320D      | 1         |
| 2007-02-12 | 320D      | 0         |
| 2007-02-13 | 320D      | 0         |
| 2007-02-14 | 320D      | 0         |
... 
+------------+-----------+-----------|

我想知道在N天内每次发布后每天的汽车销量总和。

我想要一个这样的表格(假设4天分析):

代码语言:javascript
复制
+-----------------+
| sum(sal_quant)  |
+-----------------+
| 3               | 
| 1               |
| 6               |
| 3               |
+-----------------+

这意味着,在汽车发布的第一天,3辆宝马320D被售出,在第二天,只有一辆,...诸如此类。

现在我有以下查询:

代码语言:javascript
复制
SELECT SUM(sal_quant) 
FROM daily_sales 
WHERE model_key='320D' 
AND date_key IN (
    SELECT date_key FROM car_release_dates WHERE model_key='320D')

但这只给出了第一个发布日的总和。我怎么才能得到接下来的几天?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2009-11-23 19:23:04

我想一辆车是不可能在发布日期之前卖出去的。所以你可以简单地在date_key上分组:

代码语言:javascript
复制
SELECT date_key, SUM(sal_quant) 
FROM daily_sales 
WHERE model_key='320D' 
GROUP BY date_key
ORDER BY date_key DESC
LIMIT 4

如果可以在发布日期前卖出汽车,请添加WHERE子句:

代码语言:javascript
复制
AND date_key >= (
   SELECT date_key FROM car_release_dates WHERE model_key='320D')

编辑:根据您的评论,您可以使用内部联接将查询限制在多个发布日期的四天内。例如:

代码语言:javascript
复制
SELECT ds.date_key, SUM(ds.sal_quant) 
FROM daily_sales ds
INNER JOIN car_release_dates crd
    ON crd.model_key = ds.model_key
    AND ds.date_key BETWEEN crd.date_key
        AND DATE_ADD(crd.date_key, INTERVAL 4 DAY)
WHERE ds.model_key='320D' 
GROUP BY ds.date_key
ORDER BY ds.date_key DESC
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1782399

复制
相关文章

相似问题

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