我这里有一个真正复杂的查询,至少对我而言。
这是一个包含汽车日期发布的表格(其中model_key = 320D):
+------------+-----------+
| date_key | model_key |
+------------+-----------+
| 2003-08-13 | 320D |
| 2005-11-12 | 320D |
| 2007-02-11 | 320D |
+------------+----------+
然后我有一张每日购买的表格(其中model_key = 320D):
+------------+-----------+-----------+
| 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天分析):
+-----------------+
| sum(sal_quant) |
+-----------------+
| 3 |
| 1 |
| 6 |
| 3 |
+-----------------+
这意味着,在汽车发布的第一天,售出3辆BMW 320D,第二天只售出一辆,......等等。
现在我有以下查询:
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')
但这只给了我第一个发布日的总和。我怎样才能得到接下来的日子?
感谢。
答案 0 :(得分:1)
我认为在发布日期之前无法出售汽车。所以你可以简单地分组date_key:
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子句:
AND date_key >= (
SELECT date_key FROM car_release_dates WHERE model_key='320D')
编辑:根据您的评论,您可以使用INNER JOIN将查询限制在多个发布日期的四天内。例如:
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