2009-11-23 61 views
1

我在这里有一个真正复杂的查询,至少对我而言。两个表之间复杂的MySQL查询

这里的租车日期发布的表(其中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售出,第2天,刚一..等等。

现在我有以下查询:

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') 

但这只是给我的第一个版本天的总和。我怎样才能得到未来的日子?

谢谢。

回答

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 
+0

谢谢Andomar,但你没有得到它。 320D汽车有3个发布日期,相同型号的新版本。我想知道在3个发布日期销售了多少辆320D汽车(让我们称它们为T)。然后我想知道T + 1日期有多少辆汽车被售出。然后在T + 2,... – 2009-11-23 11:32:50

+1

@布鲁诺梅洛:好的,没有从你的问题中读到每辆车有多个发布日期。回答编辑。 – Andomar 2009-11-23 12:17:15