我要选择一个特定日期的美元孝度支出。但我需要将该日期转换为韩元。货币的价值随时随美元而变化。货币历史记录在 V_CURRENCY 表中。我需要将美元乘以该数量并显示为韩元。我的查询在下面,并给出一个错误。错误为 [22008] [1861] ORA-01861 。行不匹配。
with cte as (
select t.filial_code,
t.modified_by as emp_code,
sum(t.sum_oper) as summa,
to_char(t.oper_date, 'YYYY-MM-DD') as operation_date
from OPERS t,
DEP_OPERS d
WHERE
And t.modified_by = 213
And t.filial_code = '00116'
And d.currency_code = 840
And t.oper_date >= to_date('07.01.2020', 'DD.MM.YYYY')
And t.oper_date < to_date('11.01.2020', 'DD.MM.YYYY')
group by to_char(t.oper_date, 'YYYY-MM-DD'), t.filial_code, t.modified_by
) select cte.filial_code,cte.emp_code,cte.summa * (select equival from V_CURRENCY
where date_activ = (select max(date_activ)
from V_CURRENCY
where date_activ <= cte.operation_date) and code = 840) as summa,cte.operation_date from cte;
我从cte获得以下结果:
FILIAL_CODE | EMP_CODE | SUMMA | OPERATION_DATE
-----------------------------------------------
00116 | 213 | 40000 | 2020-01-14
00116 | 213 | 6000 | 2020-01-10
00116 | 213 | 2800 | 2020-01-06
我的 V_CURRENCY 表如下:
CODE | DATE_ACTIV | EQUIVAL|
--------------------------------
840 | 2020-01-13 00:00:00 | 576.97
840 | 2020-01-07 00:00:00 | 2008.54
840 | 2020-01-06 00:00:00 | 1941.91
840 | 2019-12-22 00:00:00 | 301.62
190 | 2020-01-13 00:00:00 | 1200.97
270 | 2020-01-13 00:00:00 | 2300.21
800 | 2019-12-22 00:00:00 | 100.62
我需要将日期 2020-01-13 00:00:00 中表 V_CURRENCY 的等值乘以我的CTE结果SUMMA, OPERATION_DATE 2020-01-14 ,表示4000 * 576.97,导致 OPERATION_DATE 最接近货币更改日期。但是,当 DATE_ACTIV 存在于日期2020-01-06时,则为2800 * 1941.91。我只需要代码为840的curreny值即可。
我的最后一个结果应该是:
FILIAL_CODE | EMP_CODE | SUMMA | OPERATION_DATE
-----------------------------------------------
00116 | 213 | 40000 * 576.97 | 2020-01-14
00116 | 213 | 6000 * 2008.54 | 2020-01-10
00116 | 213 | 2800 * 1941.91 | 2020-01-06
任何回应表示赞赏。预先感谢。
答案 0 :(得分:2)
使用return batchPromises(100, asset_equipments, aeq => {
const icon_id = my_icons.find(icon => icon.name === aeq.icon_name).id;
return my_equipments.update({ icon_id }, { where: { code: aeq.eq_id } });
});
分析函数查找货币兑换有效期的截止日期,然后在货币有效的开始日期和结束日期之间的范围内联接表:
LEAD
输出:
FILIAL_CODE | EMP_CODE | SUMMA | OPERATION_DATE :---------- | -------: | -------: | :------------- 00116 | 213 | 23078800 | 14-JAN-20 00116 | 213 | 12051240 | 10-JAN-20 00116 | 213 | 5437348 | 06-JAN-20
db <>提琴here
顺便说一句,您的CTE不需要将日期转换为字符串,并且可以使用日期文字和现代ANSI连接(而不是传统的逗号连接):
SELECT y.filial_code,
y.emp_code,
y.summa * c.equival AS summa,
y.operation_date
FROM your_cte y
INNER JOIN (
SELECT c.*,
LEAD( DATE_ACTIV, 1, SYSDATE )
OVER ( PARTITION BY code ORDER BY date_activ )
AS DATE_FINISHED
FROM v_currency c
WHERE currency_code = 840
) c
ON ( y.operation_date >= c.date_activ
AND y.operation_date < c.date_finished )
您甚至不需要CTE:
with cte ( filial_code, emp_code, summa, operation_date ) as (
SELECT t.filial_code,
t.modified_by,
sum(t.sum_oper),
t.oper_date
from OPERS t
CROSS JOIN
DEP_OPERS d
WHERE t.modified_by = 213
AND t.filial_code = '00116'
AND d.currency_code = 840
AND t.oper_date >= DATE '2020-01-07'
AND t.oper_date < DATE '2020-01-11'
GROUP BY t.oper_date,
t.filial_code,
t.modified_by
)
...