我的sql查询(MySQL)实际发生了什么,我看不到为什么出现语法错误

问题描述 投票:0回答:1
SELECT SUM(RS.AuthTaxRate) AS TaxRate FROM ( SELECT ta.TaxAuthority , tr.AuthTaxRate , tr.Effective AS EffectiveDate , COALESCE(LEAD(tr.Effective, 1) OVER (PARTITION BY ta.TaxAuthority ORDER BY tr.Effective ASC), GETDATE()) AS NextRateDate FROM #TaxRates tr LEFT JOIN #TaxAreaAuthority ta ON ta.TaxAuthority = tr.TaxAuthority WHERE ta.TaxArea = 'city2' GROUP BY ta.TaxAuthority , tr.AuthTaxRate , tr.Effective ) AS RS WHERE '1994-11-01' BETWEEN RS.EffectiveDate AND RS.NextRateDate;

这里是创建脚本:

create database taxes;

use taxes;

create table TaxAreaAuthority (TaxAuthority VARCHAR(10), TaxArea VARCHAR(10));

INSERT INTO TaxAreaAuthority VALUES('city1', 'city1'), 

                                ('city2', 'city2'), 

                                ('city3', 'city3'), 

                                ('county1', 'city1'), 

                                ('county1', 'city2'), 

                                ('county2', 'city3'),

                                ('state1', 'city1'), 

                                ('state1', 'city2'), 

                                ('state1', 'city3');

create table TaxRates (TaxAuthority VARCHAR(10), Effective DATE, AuthTaxRate DECIMAL(2,1));

INSERT INTO TaxRates VALUES('city1', '1993-01-01', 1.0),

                        ('city1', '1994-01-01', 1.5),

                        ('city2', '1993-09-01', 1.5),

                        ('city2', '1994-01-01', 2.0),

                        ('city2', '1995-01-01', 2.5),

                        ('city3', '1993-01-01', 1.9),

                        ('city3', '1993-07-01', 2.3),

                        ('county1', '1993-01-01', 2.3),

                        ('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);
mysql sql database-administration
1个回答
0
投票

不需要在表名前面的那些散列:

SELECT SUM(RS.AuthTaxRate) AS TaxRate FROM ( SELECT ta.TaxAuthority , tr.AuthTaxRate , tr.Effective AS EffectiveDate , COALESCE(LEAD(tr.Effective, 1) OVER (PARTITION BY ta.TaxAuthority ORDER BY tr.Effective ASC), GETDATE()) AS NextRateDate FROM TaxRates tr LEFT JOIN TaxAreaAuthority ta ON ta.TaxAuthority = tr.TaxAuthority WHERE ta.TaxArea = 'city2' GROUP BY ta.TaxAuthority , tr.AuthTaxRate , tr.Effective ) AS RS WHERE '1994-11-01' BETWEEN RS.EffectiveDate AND RS.NextRateDate;
© www.soinside.com 2019 - 2024. All rights reserved.