当前位置: 首页 > 知识库问答 >
问题:

JdbcTemplate选择查询以获取唯一的行(每个具有唯一ID的行只存在一次)

酆奇文
2023-03-14

有人愿意帮我完成一个jdbctemplate查询吗?

只需要获取具有唯一id的行,但存在重复的行,因为其他列(如date)具有不同的值。我需要最好得到最长日期,结果集不应该有任何重复项:x个

select files.id, files.popularity, user_clicked_files.last_clicked from files inner join user_clicked_files on files.id = user_clicked_files.file_id where user_clicked_files.last_clicked > ? order by files.popularity desc limit 10

输出:

[File [id=1a9227b2-d337-4c4b-a26c-42ed8c94de34, last_clicked='2022-05-30', popularity='8'], 
File [id=1a9227b2-d337-4c4b-a26c-42ed8c94de34, last_clicked='2022-06-03', popularity='8'], 
File [id=61f3860c-22b3-4c24-90bd-98c7f520fad7, last_clicked='2022-06-04', popularity='8'], 
File [id=61f3860c-22b3-4c24-90bd-98c7f520fad7, last_clicked='2022-06-03', popularity='8'], 
File [id=d70ff033-04cb-4205-acfe-2432f66525c2, last_clicked='2022-05-30', popularity='7'], 
File [id=d70ff033-04cb-4205-acfe-2432f66525c2, last_clicked='2022-05-30', popularity='7'], 
File [id=d70ff033-04cb-4205-acfe-2432f66525c2, last_clicked='2022-05-31', popularity='7'], 
File [id=9543b842-d592-46df-a63c-8e7c14791169, last_clicked='2022-06-04', popularity='7'], 
File [id=d70ff033-04cb-4205-acfe-2432f66525c2, last_clicked='2022-05-29', popularity='7'], 
File [id=d70ff033-04cb-4205-acfe-2432f66525c2, last_clicked='2022-06-04', popularity='7']]

这几乎有效,但不完全有效。可悲的是,有重复的。

这是我正在使用的两张桌子。

CREATE TABLE files
(
    id         uuid DEFAULT gen_random_uuid() not null primary key,
    file_name  VARCHAR(255),
    popularity INTEGER
);
CREATE TABLE user_clicked_files
(
    user_id      uuid,
    file_id      uuid,
    last_clicked date,
    PRIMARY KEY (user_id, file_id)
);

PS.:使用PostgreSQL

共有2个答案

李康安
2023-03-14

想出来了。这是查询。

select f.id, f.popularity, x.last_clicked
from files f
join (
  select file_id, max(last_clicked) as last_clicked
  from user_clicked_files
  where last_clicked > ?
  group by file_id) x
on (f.id=x.file_id)
order by f.popularity desc
limit 10
闾丘正志
2023-03-14

您可以使用带有如下常见表表达式的窗口函数来选择每个id最近单击的行:

with cte as
(
  select files.id, files.popularity, user_clicked_files.last_clicked ,ROW_NUMBER()over(partition by files.id order by user_clicked_files.last_clicked desc)rn
  from files 
  inner join user_clicked_files on files.id = user_clicked_files.file_id 
  where user_clicked_files.last_clicked > ? 
)
select id, popularity, last_clicked from cte where rn=1
order by files.popularity desc limit 10
 类似资料:
  • 问题内容: 我对数据库表中的唯一行有问题,现在可以这样做: 当我在所有列中使用UNIQUE属性时,即使第二个Moore名称不同,我也会插入第二个Moore错误:/ 如何使用UNIQUE(或INDEX?)在db表中执行类似的操作: 抱歉,如果问题很简单,但是我是sql的初学者,并且在使用UNIQUE之类的UNIQUE时找到一些好的示例时遇到问题:/或者也许我必须在插入新行之前从db中选择一个表并检查

  • 问题内容: 假设您有下表(这里关注的列是): 如何只提取每个的第一次出现?结果表将是: 问题答案: mysql对此有一个“作弊”: 这就是你所需要的,因为在MySQL中它可以让你 没有 聚集不分组,按列(其他数据库将抛出一个语法错误),在这种情况下,输出仅对每个第一次出现组由值(S)。不过,请注意,这将无法保证的 方式 中,“第一”发生确定(这将是行只是如何读) 如果您要先出现某个 特定的东西,

  • 问题内容: 我希望将一列附加到我的表中,该列将是从顺序列表=到行数的随机数。 因此,如果我的表有 999行 ,则 数字1到999将被随机且唯一地分配 。 现在,我想到可以添加一个虚拟的TempRandomColumn = Rand(),然后对其进行排序,然后使用PHP依次添加数字。但这意味着999条MySQL语句。 有没有办法使用单个MySQL语句来做到这一点? 感谢您的指导。 问题答案:

  • 问题内容: 我正在尝试为添加到jqGrid的新行分配唯一的ID。我使用免费的jqGrid 4.11.0,它是服务器端的java rest服务,而数据库是MS SQL。 我注意到jqGrid给出的默认ID是jqg +一个数字。关于如何制作唯一未在任何数据库记录中使用的唯一ID的任何建议?我应该从服务器端执行此操作还是可以在jqGrid代码中进行? 在晚上的某个时间点,此代码可以正常工作,并继续为所有

  • 我想为某个度量的特定标记获取唯一值。例如,如果我有度量“metric\u name”有标记“tag\u name1”和“tag\u name2”: 我想获得“tag_name1”标记的唯一值:a、c、e 有点像:

  • 问题内容: 我有下表,我必须从中获取非唯一行 我想获取column的所有行,至少在两行中具有相同的值。 上表查询的输出必须为 我尝试了以下请求,但均未成功: 问题答案: 尝试这个: 您发布的数据的结果: