请考虑以下数据集......
RATE_ID YEAR MONTH WEEK_RATE DAY_RATE
1 2014 01 364 52
2 2014 02 364 52
3 2014 03 364 52
4 2014 04 427 61
5 2014 05 455 65
6 2014 06 546 78
7 2014 07 665 95
8 2014 08 728 104
9 2014 09 546 78
10 2014 10 455 65
11 2014 11 364 52
12 2014 12 364 52
同样的Sqlfiddle ... sqlfiddle.com/#!2/9a541/6/0
2014-07-28 to 2014-08 08
,结果应该是2014-07赛季的4晚和2014-08赛季的7晚,所以计算2014-07赛季的4x day_rate和2014-08赛季的7x day_rate 。因此,期望的结果将如下所示:夜晚:2014年7月= 4 =€380
夜晚:2014年8月= 7 =€665(仅限日期范围超过上个月末)
我该怎么做。
我希望这很清楚,但如果没有请问。任何帮助都会很棒。
由于
答案 0 :(得分:0)
如果您有某种实用程序表(比如所有可能日期的表),那么您可以在MySQL中完成所有操作,就像这样......
SELECT *
FROM calendar c
JOIN rates r
ON r.year = YEAR(c.dt)
AND r.month = MONTH(c.dt)
WHERE c.dt >= '2014-07-28' AND c.dt < '2014-08-08';
+------------+---------+------+-------+-----------+----------+
| dt | rate_id | year | month | week_rate | day_rate |
+------------+---------+------+-------+-----------+----------+
| 2014-07-28 | 7 | 2014 | 07 | 665 | 95 |
| 2014-07-29 | 7 | 2014 | 07 | 665 | 95 |
| 2014-07-30 | 7 | 2014 | 07 | 665 | 95 |
| 2014-07-31 | 7 | 2014 | 07 | 665 | 95 |
| 2014-08-01 | 8 | 2014 | 08 | 728 | 104 |
| 2014-08-02 | 8 | 2014 | 08 | 728 | 104 |
| 2014-08-03 | 8 | 2014 | 08 | 728 | 104 |
| 2014-08-04 | 8 | 2014 | 08 | 728 | 104 |
| 2014-08-05 | 8 | 2014 | 08 | 728 | 104 |
| 2014-08-06 | 8 | 2014 | 08 | 728 | 104 |
| 2014-08-07 | 8 | 2014 | 08 | 728 | 104 |
+------------+---------+------+-------+-----------+----------+
......所以......
SELECT SUM(day_rate)
FROM calendar c
JOIN rates r
ON r.year = YEAR(c.dt)
AND r.month = MONTH(c.dt)
WHERE c.dt >= '2014-07-28'
AND c.dt < '2014-08-08';
+---------------+
| SUM(day_rate) |
+---------------+
| 1108 |
+---------------+
你也可以使用一些连接和UNION伪造它。但是,PHP解决方案可能更实用,但我会将其留给PHP专家。