Sql 如何根据特定日期范围添加列
我有两张桌子需要合并 第一张表: 第二表: 基于ACCT_DATE,我希望添加RATE列&结果如下所示:Sql 如何根据特定日期范围添加列,sql,Sql,我有两张桌子需要合并 第一张表: 第二表: 基于ACCT_DATE,我希望添加RATE列&结果如下所示: PO_NO TRANS_DATE ACCT_DATE SUPP_NO CURRENCY LOCAL_AMT RATE 1000068 20110114 20110115 S016 USD 16,500.00 1.286 1000070 20110214 20110215 S016 USD 7,66
PO_NO TRANS_DATE ACCT_DATE SUPP_NO CURRENCY LOCAL_AMT RATE
1000068 20110114 20110115 S016 USD 16,500.00 1.286
1000070 20110214 20110215 S016 USD 7,660.00 1.275
1000072 20110317 20110322 S025 USD 1,080.00 1.275
1000132 20110314 20110315 S037 USD 3,500.00 1.275
1000133 20110414 20110415 S038 USD 14,500.00 1.26
1000170 20110531 20110531 S016 USD 15,400.00 1.225
如何使用SQL实现这一点?谢谢 在MySQL中,您可以执行以下操作:
SELECT st.*, ft.rate FROM second_table st LEFT JOIN first_table ft ON (MONTH(acct_date) = MONTH(eff_date) AND YEAR(acct_date) = YEAR(eff_date) )
下面的解决方案假定trans_date、acct_date和eff_date为int。如果它们是date,则需要根据SQL server使用适当的日期函数
SELECT
[trans].[po_no]
,[trans].[trans_date]
,[trans].[acct_date]
,[trans].[supp_no]
,[trans].[currency]
,[trans].[local_amt]
,[month_rate].[rate]
FROM [trans]
JOIN [month_rate] on [eff_date] / 100 = [trans].[acct_date] / 100
AND [month_rate].[currency] = [trans].[currency]
根据你们给出的例子,你们只有EFF_日期和ACCT_日期的格式,所以我认为你们可以直接连接这两列的基础 像-
select st.*,ft.rate from first_table ft, second_table st
where st.acct_date=ft.eff_date
但这并不能提供您在问题中提到的所需输出
你真的想加入acct_date吗
如果您想在没有此类条件的情况下直接加入,那么最好提及该条件并更新您的问题如果有索引,这将使用firstTable.t.EFF_DATE和secondTable.ACCT_DATE的索引
任何调用MONTH、YEAR等函数的解决方案都无法有效地使用此类索引
SELECT st.*
, ( SELECT ft.RATE
FROM firstTable ft
WHERE ft.EFF_DATE <= st.ACCT_DATE
ORDER BY ft.EFF_DATE DESC
LIMIT 1
) AS RATE
FROM secondTable st
限制1是MySQL语法。对于SQL Server,请选择TOP 1。对于大型表,这将非常缓慢。
select st.*,ft.rate from second_table st,first_table ft
where to_char(st.acct_date,'YYYYMM')=to_char(ft.eff_date,'YYYYMM')
select st.*,ft.rate from first_table ft, second_table st
where st.acct_date=ft.eff_date
SELECT st.*
, ( SELECT ft.RATE
FROM firstTable ft
WHERE ft.EFF_DATE <= st.ACCT_DATE
ORDER BY ft.EFF_DATE DESC
LIMIT 1
) AS RATE
FROM secondTable st