我有一个名为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
答案 0 :(得分:1)
你不能使用TOP,LIMIT,ROWNUM,因为在所有者DBMS中以不同的方式进行管理。
因此,如果您只想获得一个元素,则必须更改查询,根据某些条件引入NOT EXISTS子句允许您选择“last”元素。在您的情况下,修复播放列表您的条件是字段“更新”
试试这个:
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子句
中