所以我有这张产品信息表。每次更改特定产品时,都会插入一行新值,包括时间戳和修改它的用户。
为了显示信息,我搜索特定产品的最新行(由product\u id列标识)。
但现在我需要知道谁是最后一个修改了一个名为status的特定列的人。
假设我的table是这个
所以本质上我需要编写一个查询,告诉我给定列的最后一次更改是什么时候。
product_id | name | status | user | keyid
--------------------------------------------
598 | prrr | 0 | john | 10
598 | prod | 1 | jane | 11
456 | abcd | 2 | mac | 12
598 | prdd | 2 | kate | 13
598 | rdpd | 2 | jane | 14
456 | prrr | 3 | john | 15
456 | abbb | 3 | kate | 16
所以598产品的最新信息是
598 rdpd 2 jane 14
但最后一个被释放的人是凯特
产品456的最新信息如下
456 abbb 3 kate 16
但最后一个被释放的人是约翰
因此,理想情况下,我希望编写一个返回
598 kate 13
456 john 15
我甚至还不知道如何写这样的查询,所以我想知道是否有人能帮我。
2条答案
按热度按时间68bkxrlz1#
可以使用窗口函数:
最里面的子查询将每个值与其前一个值进行比较。中间子查询枚举状态发生更改的产品的每一行。外部查询筛选以获取最新的查询。
bqucvtff2#
如果您的数据库不支持窗口函数,那么逻辑就要复杂一些。
作为初学者,请考虑下面的查询,它为您提供了第一个
idkey
具有最新status
每product_id
:这将返回:
然后可以使用此结果集筛选表:
结果:
db小提琴演示