我对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
我确实会建议 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