所以我要求一个查询将采用任何搜索参数(如regexp_like中所示),并且查询结果会找到所有重复项,并且只保留具有最新创建日期的那些参数,并记住可能存在不同的重复项在结果集中。
下面的示例是一个包含2列'name'和'create_date'的表。
我到目前为止:
SELECT name, create_date
FROM (
SELECT cs.name, cs.create_date,
ROW_NUMBER() OVER (PARTITION BY cs.name ORDER BY cs.create_date DESC) AS RowNo
FROM names_and_dates_table cs
WHERE REGEXP_LIKE(cs.name, 'Mr Gary', 'i')
)
WHERE RowNo = 1;
为了澄清这一点,将在Web应用程序的类型提前场景中使用,以便用户在输入字段中键入时为其提供建议。在这种情况下,他们输入了“Mr Gary”,打算输入第二个名字。
理想情况下,我需要查询(对于此示例)来查看与regexp_like参数匹配的所有记录,这些记录可能是很多(或几个)以及有对,三元组或更多同名的任何地方只保留最新create_date的名称(显然也会保留没有重复的任何其他名称)。
我意识到max(create_date)会获得最新的日期,但我似乎无法在查询中正常工作。
任何帮助表示赞赏。 谢谢。
答案 0 :(得分:0)
试试这个:
select cs.name, cs.create_date
from names_and_dates_table cs
where cs.create_date = ( select max(nt.create_date)
from names_and_dates_table nt
where nt.name = cs.name )
and REGEXP_LIKE(cs.name, 'Mr Gary', 'i')
and rownum = 1
答案 1 :(得分:0)
你非常接近。我认为您需要做的就是将 partition by
留下来,如下所示:
SELECT name, create_date
FROM (
SELECT cs.name, cs.create_date,
ROW_NUMBER() OVER (ORDER BY cs.create_date DESC) AS RowNo
FROM names_and_dates_table cs
WHERE REGEXP_LIKE(cs.name, 'Mr Gary', 'i')
)
WHERE RowNo = 1;
您的正则表达式已经过滤到您的匹配项,因此只需获取最新的匹配项。