0

我有一个名为 PlaylistDayStats 的模型,它与播放列表模型相关。我正在尝试执行以下查询,但如果它们与同一个播放列表相关,我不想返回两个 PlaylistDayStats。我只想根据最近更新的 PlaylistDayStat 返回第一个。

我最初的查询是:

select p from PlaylistDayStats p where order by p.updated desc

我怎样才能增加查询,以便它只为每个“p.playlist”返回一个“p”,基于哪个是首先使用“p.updated desc”返回的?

更新:

基于 Joe Taras 示例,我进行了更新,我还必须考虑到需要过滤到某个用户的 PlaylistDayStats ......所以“p.user = johndoe@gmail.com”。我还需要维持秩序。这个新查询似乎对我有用,但我不确定我所做的更新是否是进行查询的最有效方式,或者我是否可能搞砸了我没有预料到的其他事情。

select p 
from PlaylistDayStats p 
where not exists( 
    select 'next'  
    from PlaylistDayStats p2  
    where p2.playlist.id = p.playlist.id  
    and p2.updated > p.updated  
    and p2.user = johndoe@gmail.com  
)  
and p.user = johndoe@gmail.com 
order by p.updated desc
4

1 回答 1

1

在 HQL 中,您不能使用 TOP、LIMIT、ROWNUM,因为在所有者 DBMS 中以不同的方式进行管理。

因此,如果您只想获得一个元素,则必须更改查询,根据某些条件引入 NOT EXISTS 子句允许您选择“最后一个”元素。在您的情况下,修复了您的条件是“更新”字段的播放列表

尝试这个:

select p
from PlaylistDayStats p 
where not exists(
    select 'next'
    from PlayListDayStat p2
    where p2.playList = p.playList
    and p2.updated > p.updated
    and p2.user = p.user
)
and p.user = YOURVARIABLE

如果您有其他关于歧视记录的条件,请在子查询的 where 子句中添加

于 2013-08-02T10:14:34.183 回答