我在postgres中有一个表,其中包含聚合数据,这些表有以下字段
搜索项-->特定搜索项
日期-->执行搜索的日期
search\u count-->使用此搜索项执行搜索的次数
最小结果计数-->搜索项返回的最小结果数是多少
max\u results\u count-->搜索项返回的最大结果数是多少
上次搜索结果\u计数-->执行上次搜索时返回的搜索结果数
零\u结果\u计数-->此搜索项没有结果的天数
其中date和search\u term的组合是唯一的,这意味着搜索项不会为该日期重复,而是更新值。
我正在尝试编写一个持续7天的sql查询,以获取以下记录
搜索\u项
最小结果计数
最大结果计数
零结果计数
上次\u结果\u计数
我可以使用聚合min,max,sum找到所有的值,但是我找不到最后一个\u结果\u计数的值,因为这需要我只选取最后一个值。
这是一个与预期结果相同的表
search_term search_count min_rc max_rc zero_count last_rc date
---------------------------------------------------------------------------------------
term1 10 10 20 0 4 01-01-2020
term1 10 11 21 0 5 02-01-2020
term1 10 12 22 0 6 03-01-2020
term1 10 13 23 0 7 04-01-2020
term1 10 14 24 0 8 05-01-2020
term2 10 24 25 0 9 01-01-2020
term2 10 23 26 0 10 02-01-2020
term2 10 22 27 0 11 03-01-2020
term2 10 21 28 0 12 04-01-2020
term2 10 0 29 3 0 04-01-2020
如果我运行查询05-01-2020,我应该
search_term search_count min_rc max_rc zero_count last_rc
-------------------------------------------------------------------------
term1 50 10 24 0 8
term2 50 0 29 3 0
如果我运行查询04-01-2020,我应该
search_term search_count min_rc max_rc zero_count last_rc
-------------------------------------------------------------------------
term1 40 10 23 0 7
term2 40 21 28 0 12
如果我运行03-01-2020查询,我应该
search_term search_count min_rc max_rc zero_count last_rc
-------------------------------------------------------------------------
term1 30 10 23 0 6
term2 30 22 27 0 11
rc代表结果计数
以此类推,任何有助于得出最后一个结果的方法都会非常有用
2条答案
按热度按时间8xiog9wr1#
您可以使用行数窗口函数来实现此目的。
ROW_NUMBER
用inted命令数据,然后生成一个数字。然后可以对数据进行分组并使用
MAX(ROW_NUMBERED_COLUMN)
mwyxok5s2#
您可以使用下面的窗口函数。
结果集:
更新版本*
另一个更简单的方法,我在你的评论后意识到你想要什么。
使用窗口函数last\u value更简单
使用任何更新版本的结果集。