根据SPRINGBOOT的时间戳选择最近的条目。

问题描述 投票:0回答:1

我对spring boot(data jpa)和Postgres相当陌生。我有一个表,它有

  • id (UUID)作为主键

  • a personId (这是一个来自人名表的外键,它在人名表中是PK的)

  • 布尔型标志 isEnrolled

  • updateDate.

现在,在我的数据库中,我正在存储personIds的历史记录,当他们注册时,当他们没有注册时(标志为trueefalse),以及时间戳。所以基本上一个personId可以在我的表中有多个条目。

现在我需要获取 most recent 我的理解是,我们不能在springboot项目中使用普通的 findBy 在我 CrudRepository<HistoryEntity, UUID> 因为这涉及到基于personId的搜索,而personId是一个 Long 值。

一种可能的方法是使用 @Query() 来帮助我选择记录。但我不知道如何实现这个查询。

我知道我应该使用 SELECT DISTINCT ON (personId) 但我只是想得到 isEnrolled 从结果来看。

真的很感谢一些帮助,如何去实现这个要求。

EDIT:@Query ("SELECT DISTINCT ON(personId)......")在springboot中给出了编译问题。")在springboot中出现了编译问题 :(

TIA

postgresql spring-boot spring-data-jpa greatest-n-per-group
1个回答
0
投票

我确实会建议 distinct on:

select distinct on(personId) t.*
from mytable t
order by personId, updateDate desc

对于每一个 personId,这就给了你整个行的最新的 updateAt - 其中 isEnrolled 的一部分。

或者,如果您想获得特定的 plannerId您可以过滤、排序结果,并将结果集限制为一行。

select t.*
from mytable t
where personID = ?
order by updateAt desc
limit 1
© www.soinside.com 2019 - 2024. All rights reserved.