我需要写一个查询,我想它需要一个子查询。目前,我正在使用datagrip将查询编写为原始sql语句,并且需要在postgres服务器上工作。我使用laravel来编写这个查询需要在其中工作的应用程序。
写入查询所需的两个表是媒体文件和状态。这两个表之间有一个链接:media\u files.id=statuses.model\u id
文件存储在媒体文件中,可以有两种状态:挂起和附加。文件的状态存储在状态中。状态表还可以包含其他事物的状态,如任务、事件、用户等。
我需要一种方法来获取所有文件的最后一个状态是挂起。有些文件甚至可能没有挂起状态,可以忽略这些文件。
状态表可以保存同一媒体文件的多个状态。例如,你可以有:
记录1
媒体\u files.id=1
media\u files.name='简历文档'
statuses.id=2
statuses.model_id=1
statuses.model_type='应用程序\媒体文件'
statuses.name='附加'
statuses.created_at='2020-06-16 17:39:08'
记录2
媒体\u files.id=1
media\u files.name='简历文档'
statuses.id=1
statuses.model_id=1
statuses.model_type='应用程序\媒体文件'
statuses.name='挂起'
statuses.created_at='2020-06-14 17:30:00'
我已经开始了查询,但它似乎工作不正常:
select media_files.*, (
select name
from statuses
where model_id = media_files.id
and model_type = 'App\File'
order by statuses.created_at desc
limit 1
)
as latest_status
from media_files
inner join statuses on statuses.model_id = media_files.id
where statuses.model_type = 'App\Entities\Media\File'
order by media_files.id desc;
2条答案
按热度按时间fae0ux8s1#
您可以使用条件聚合来确定最后一个挂起状态是否为最后一个状态:
也可以使用相关子查询:
atmip9wb2#
你也可以使用解析函数