Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL选择给定日期之前的最新日期来计算总和()_Mysql_Sql - Fatal编程技术网

MySQL选择给定日期之前的最新日期来计算总和()

MySQL选择给定日期之前的最新日期来计算总和(),mysql,sql,Mysql,Sql,我正在为我的一个班做作业,到处寻找我问题的答案,但找不到答案。我有两张桌子在用 它们是: TaxAreaAuthority TaxRates +--------------+---------+ +--------------+------------+-------------+ | TaxAuthority | TaxArea | | TaxAuthority | Effective | AuthTaxRate | +-----------

我正在为我的一个班做作业,到处寻找我问题的答案,但找不到答案。我有两张桌子在用

它们是:

TaxAreaAuthority                TaxRates
+--------------+---------+      +--------------+------------+-------------+
| TaxAuthority | TaxArea |      | TaxAuthority | Effective  | AuthTaxRate |
+--------------+---------+      +--------------+------------+-------------+
| city1        | city1   |      | city1        | 1993-01-01 |         1.0 |
| city2        | city2   |      | city1        | 1994-01-01 |         1.5 |
| city3        | city3   |      | city2        | 1993-09-01 |         1.5 |
| county1      | city1   |      | city2        | 1994-01-01 |         2.0 |
| county1      | city2   |      | city2        | 1995-01-01 |         2.5 |
| county2      | city3   |      | city3        | 1993-01-01 |         1.9 |
| state1       | city1   |      | city3        | 1993-07-01 |         2.3 |
| state1       | city2   |      | county1      | 1993-01-01 |         2.3 |
| state1       | city3   |      | county1      | 1994-10-01 |         2.5 |
+--------------+---------+      | county1      | 1995-01-01 |         2.7 |
                                | county2      | 1993-01-01 |         2.4 |
                                | county2      | 1994-01-01 |         2.7 |
                                | county2      | 1995-01-01 |         2.8 |
                                | state1       | 1993-01-01 |         0.5 |
                                | state1       | 1994-01-01 |         0.8 |
                                | state1       | 1994-07-01 |         0.9 |
                                | state1       | 1994-10-01 |         1.1 |
                                +--------------+------------+-------------+
以下是主要问题和示例:

1994年11月1日第二城市的税率是多少

城市2=2.0,国家1=2.5,州1=1.1

总计=5.6

我可以通过以下声明从税务局选择县和州:

SELECT TaxAuthority FROM TaxAreaAuthority
    WHERE TaxAuthority LIKE 'county%'
    AND TaxArea='city2';

SELECT TaxAuthority FROM TaxAreaAuthority
    WHERE TaxAuthority LIKE 'state%'
    AND TaxArea='city2';
这就是我被困的地方。我选择正确日期的代码已关闭,这导致它无法将正确的AuthTaxRate项添加到一起

SELECT SUM(AuthTaxRate) as 'Tax_Total' FROM TaxRates
    WHERE EXTRACT(YEAR FROM Effective)='1994'
        AND TaxAuthority=(
            (SELECT TaxAuthority FROM TaxRates
                WHERE TaxAuthority='city2'
                AND EXTRACT(year FROM Effective)='1994')
            OR
            (SELECT TaxAuthority FROM TaxAreaAuthority
                WHERE TaxAuthority LIKE 'county%'
                AND TaxArea='city2')
            OR
            (SELECT TaxAuthority FROM TaxAreaAuthority
                WHERE TaxAuthority LIKE 'state%'
                AND TaxArea='city2')
            )
    ;
它返回以下内容:

+-----------+
| Tax_Total |
+-----------+
|      11.5 |
+-----------+
但我需要它来匹配他上面给出的例子


任何帮助都将不胜感激。我很确定这都是因为我没有选择正确的日期来决定使用哪个税务机关和AuthTaxRate。再次感谢您的帮助。

您想对分组最大值求和

首先,通过连接表格并对结果进行分组,找到相关的税务机关对:

SELECT   TaxAuthority, MAX(Effective) Effective
FROM     TaxRates JOIN TaxAreaAuthority USING (TaxAuthority)
WHERE    TaxArea = 'city2' AND Effective <= '1994-11-01'
GROUP BY TaxAuthority

非常感谢你。。。这正是我想要的,但我就是无法在脑海中正确地组织它!
SELECT SUM(AuthTaxRate)
FROM   TaxRates NATURAL JOIN (
  SELECT   TaxAuthority, MAX(Effective) Effective
  FROM     TaxRates JOIN TaxAreaAuthority USING (TaxAuthority)
  WHERE    TaxArea = 'city2' AND Effective <= '1994-11-01'
  GROUP BY TaxAuthority
) t