gpt4 book ai didi

javascript - 如何使用 sequelize model.findAll() 获取表的最大值

转载 作者:行者123 更新时间:2023-12-03 22:20:37 28 4
gpt4 key购买 nike

我有一个用例,必须将对 Products 表所做的每个更改存储为已更改的行版本。所以我的表由如下行组成:
/image/zXJ8S.png
因此,当我们使用 model.findAll() 时,它​​将返回所有行,包括每行的版本。这对于历史 View 来说很好。这里的问题是,我们如何在不返回表的先前版本(旧更改)的情况下获取表中所有最新版本的行?我有点担心我们可以使用 sequelize max 属性来实现这一点。但不确定如何使用它来实现我的用例。任何人都可以请让我知道如何做到这一点?谢谢

最佳答案

在 Sequelize 之前
有几种方法可以解决这个问题,尽管子查询是您可以做到的方法之一。
我已经演示了在 where 子句中添加一个带有 max 函数的子查询。
我们先在简单的mysql中复制一下

mysql> create table product (productId VARCHAR(200), docversion integer, name VARCHAR(200), price integer, location VARCHAR(200));
Query OK, 0 rows affected (1.01 sec)

mysql> insert into product(productID, docversion, name, price, location) VALUES('PID123', 0, 'Chair', 25, 'USA');
Query OK, 1 row affected (0.07 sec)

mysql> insert into product(productID, docversion, name, price, location) VALUES('PID123', 1, 'Chair', 32, 'USA');
Query OK, 1 row affected (0.12 sec)

mysql> insert into product(productID, docversion, name, price, location) VALUES('PID456', 0, 'Table', 39, 'UK');
Query OK, 1 row affected (0.16 sec)

mysql> insert into product(productID, docversion, name, price, location) VALUES('PID456', 1, 'Table', 43, 'Canada');
Query OK, 1 row affected (0.08 sec)

mysql> insert into product(productID, docversion, name, price, location) VALUES('PID123', 2, 'Chair', 29, 'UK');
Query OK, 1 row affected (0.09 sec)

mysql> select * from product;
+-----------+------------+-------+-------+----------+
| productId | docversion | name | price | location |
+-----------+------------+-------+-------+----------+
| PID123 | 0 | Chair | 25 | USA |
| PID123 | 1 | Chair | 32 | USA |
| PID456 | 0 | Table | 39 | UK |
| PID456 | 1 | Table | 43 | Canada |
| PID123 | 2 | Chair | 29 | UK |
+-----------+------------+-------+-------+----------+
5 rows in set (0.00 sec)


mysql> select * from product where location='USA' AND name='Chair' AND docversion = (select max(docversion) from product where location='USA' AND name='Chair' group by productId);
+-----------+------------+-------+-------+----------+
| productId | docversion | name | price | location |
+-----------+------------+-------+-------+----------+
| PID123 | 1 | Chair | 32 | USA |
+-----------+------------+-------+-------+----------+
1 row in set (0.01 sec)
现在将相同的查询转换为 sequelize
product.findAll({
where: {
location:{
[Op.eq]: 'USA',
},
name:{
[Op.eq]: 'Chair',
},
docversion:{
[Op.eq]: sequelize.literal(`select max(docversion) from product where location='USA' AND name='Chair' group by productId`),
},
}
})

关于javascript - 如何使用 sequelize model.findAll() 获取表的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66828945/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com