每次用户搜索的东西都会被记录到表中。
子搜索也会被记录下来。它们是用星号记录的。
每次搜索我都会尝试拉最长的字符串。
用户可以执行多个搜索。
例如,这里User1搜索“数据管理”和“状态信息”。我想忽略记录的部分搜索(子搜索),如“数据管理*”、“数据管理*”、“状态输入*”,并拉取已完成的完整搜索。
桌子
id user data
---------------
1 user1 data manag*
2 user1 confer*
3 user1 incomplete sear*
4 user1 data managem*
5 user1 conference c*
6 user1 data management
7 user1 conference call*
8 user1 status in*
9 user1 status information
输出应该是
user1 data management
user1 conference call*
user1 incomplete sear*
user1 status information
你能帮忙吗?
最佳答案
这样做很好:
with
searches (id, "user", data) as ( values
(1, 'user1', 'data manag*'),
(2, 'user1', 'confer*'),
(3, 'user1', 'incomplete sear*'),
(4, 'user1', 'data managem*'),
(5, 'user1', 'conference c*'),
(6, 'user1', 'data management'),
(7, 'user1', 'conference call*'),
(8, 'user1', 'status in*'),
(9, 'user1', 'status information')
)
select "user", data
from searches s
where data not like '%*'
or not exists (
select 1
from searches
where "user" = s."user"
and id <> s.id
and data like (left(s.data, -1)||'%')
)