我在哪里放置WHERE语句?

时间:2019-08-30 11:42:39

标签: sql ms-access

我有以下两个数据表:

deposits

(Rationale专栏是解释OUTPUT栏的原理,而不是字段本身)

我目前有以下SQL,通过ID_Ti将FS_1占FSOF_1的百分比:

bids

我现在想基于该行日期或该日期之前的ID_Ti记录的总和将该百分比添加到tblTourns_atp中的每一行。我很确定我需要一个带有WHERE语句的子查询,但是我不知道在哪里以及语法。预先感谢。

2 个答案:

答案 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