【发布时间】:2017-10-18 06:41:21
【问题描述】:
我正在制作 Excel Oracle Query 以实现以下目标。
我有两张表,一张是订单和开票时间,另一张是汇率以及汇率适用的日期:
表作业:
ID INVOICE_DATE
1 05-05-2017
2 05-03-2017
3 04-28-2017
4 04-15-2017
5 04-01-2017
6 03-28-2017
7 03-15-2017
8 03-02-2017
9 02-27-2017
表 EXCHG:
CURR RATE DATE_FROM
USD 0.92 05-01-2017
GBP 1.21 05-01-2017
USD 0.95 04-04-2017
GBP 1.18 04-04-2017
USD 0.94 04-01-2017
GBP 1.19 04-01-2017
USD 0.91 03-03-2017
GBP 1.17 03-03-2017
USD 0.92 03-01-2017
GBP 1.20 03-01-2017
USD 0.93 02-01-2017
GBP 1.21 02-01-2017
我想获取带有发票日期和当时适用汇率的订单。
目前我有以下 SQL 查询:
SELECT JOBS.ID, JOBS.INVOICE_DATE, EXCHG.CURR, EXCHG.RATE, EXCHG.DATE_FROM
FROM LOC.JOBS JOBS
LEFT JOIN LOC.EXCHG EXCHG
ON (JOBS.INVOICE_DATE-EXCHG.DATE_FROM) >= 0) AND (JOBS.INVOICE_DATE-EXCHG.DATE_FROM <= 31)
WHERE
EXCHG.CURR = 'USD'
这一切正常,只是我得到了一些双倍或更多汇率的订单:
ID INVOICE_DATE RATE_USD DATE_FROM
1 5/5/2017 0.92 5/1/2017
1 5/5/2017 0.95 4/4/2017
2 5/3/2017 0.92 5/1/2017
2 5/3/2017 0.95 4/4/2017
3 4/28/2017 0.95 4/4/2017
3 4/28/2017 0.94 4/1/2017
4 4/15/2017 0.95 4/4/2017
4 4/15/2017 0.94 4/1/2017
5 4/1/2017 0.94 4/1/2017
5 4/1/2017 0.91 3/3/2017
5 4/1/2017 0.92 3/1/2017
6 3/28/2017 0.91 3/3/2017
6 3/28/2017 0.92 3/1/2017
7 3/15/2017 0.91 3/3/2017
7 3/15/2017 0.92 3/1/2017
8 3/2/2017 0.92 3/1/2017
8 3/2/2017 0.93 2/1/2017
9 2/27/2017 0.93 2/1/2017
我想得到的是:
ID INVOICE_DATE RATE_USD DATE_FROM
1 5/5/2017 0.92 5/1/2017
2 5/3/2017 0.92 5/1/2017
3 4/28/2017 0.95 4/4/2017
4 4/15/2017 0.95 4/4/2017
5 4/1/2017 0.94 4/1/2017
6 3/28/2017 0.91 3/3/2017
7 3/15/2017 0.91 3/3/2017
8 3/2/2017 0.92 3/1/2017
9 2/27/2017 0.93 2/1/2017
我想弄清楚如何做到这一点,不知何故我需要选择这两个语句结果中的最小值:
JOBS.INVOICE_DATE-EXCHG.DATE_FROM >= 0 AND JOBS.INVOICE_DATE-EXCHG.DATE_FROM <= 31
我能想到的最好的是:
SELECT JOBS.ID, JOBS.INVOICE_DATE, EXCHG.CURR, EXCHG.RATE, EXCHG.DATE_FROM
FROM LOC.JOBS JOBS
LEFT JOIN LOC.EXCHG EXCHG
ON (MIN(JOBS.INVOICE_DATE-EXCHG.DATE_FROM) AND (JOBS.INVOICE_DATE-EXCHG.DATE_FROM >= 0))
WHERE
EXCHG.CURR = 'USD'
但这给了我以下错误: [Oracle][ODBC][Ora]ORA-00934: 这里不允许使用组函数
有人可以帮我解决这个问题吗?我会很高兴的。
弗洛里斯
PS。这是我在这里的第一个问题,所以我希望它很好:)
【问题讨论】: