我有以下两个数据表:
deposits
(Rationale专栏是解释OUTPUT栏的原理,而不是字段本身)
我目前有以下SQL,通过ID_Ti将FS_1占FSOF_1的百分比:
bids
我现在想基于该行日期或该日期之前的ID_Ti记录的总和将该百分比添加到tblTourns_atp中的每一行。我很确定我需要一个带有WHERE语句的子查询,但是我不知道在哪里以及语法。预先感谢。
答案 0 :(得分:2)
加入表并使用相关的子查询作为输出:
const data = await <MyModel>.findAll({
order: [['created_date', 'DESC']],
attributes: [
'id',
[sequelize.cast(sequelize.col('<my_table>.created_date'), 'String'), 'createdDate'],
[sequelize.cast(sequelize.col('<my_table>.updated_date'), 'String'), 'updatedDate'],
...
],
...
});
结果:
SELECT t.id_t, t.id_ti, t.Date,
(
select round(100 * sum(ss.fs_1) / sum(ss.fsof_1), 0)
from tbltourns_atp as tt inner join stat_atp as ss on tt.id_t = ss.id_t
where tt.id_ti = t.id_ti and tt.date <= t.date
) as output
FROM tbltourns_atp as t;
请注意,您按照id_t id_ti Date output
1 1 1/1/2019 50
2 1 5/1/2019 31
3 1 3/1/2019 32
4 2 4/1/2019 30
5 2 5/1/2019 30
6 2 6/1/2019 29
7 3 1/1/2019 50
8 3 8/1/2019 33
9 3 2/1/2019 32
10 3 6/1/2019 35
的期望发布的Output
是 8 和 10 错误。
答案 1 :(得分:1)
您还可以使用联接代替相关子查询来解决此问题,这可能会提高性能:
select t1.id_t, sum(t3.fs_1)/sum(t3.fsof_1) as output
from
(
tbltourns_atp t1 inner join tbltourns_atp t2 on
t1.id_ti = t2.id_ti and t1.date >= t2.date
)
inner join stat_atp t3 on t2.id_t = t3.id_t
group by t1.id_t