gpt4 book ai didi

mysql - 多对多不同行(基于日期的最后一行)

转载 作者:行者123 更新时间:2023-11-29 08:01:06 25 4
gpt4 key购买 nike

我有三张 table

图片(表):

Pic_id
Pic name

审核(多对多关系)(tbl):

Pic_id
state_id
date(type: datetime)

状态(表):

state_id
state_name

我可以为特定图片设置不同的状态,但会考虑基于日期的最后一个!

我已尝试以下方法来查询所有图片(应该是不同的)并显示状态(基于审核表中的日期的最后一个状态),但显然我错了:

SELECT distinct P.pic_id,m.state_id,m.date,st.state_name
FROM Pictures P
left join moderation m
on P.pic_id = m.pic_id
join state st
on m.state_id = st.state_id
group by P.pic_id
order by m.date ASC

请告诉我正确的方法是什么?

如果您需要更多说明,请告诉我!

Pictures:

pic_id Pic_name
1 Test1
2 Test2

Moderation:
Pic_id state_id date
1 1 2000-01-01
1 2 2005-01-01
2 2 2000-01-01
2 1 2001-01-01

state:
state_id state_name
1 accepted
2 declined

Desired out put:

P.pic_id, m.state_id, m.date, st.state_name
1 2 2005-01-01 declined
2 1 2001-01-01 accepted

最佳答案

执行此操作的常见方法是使用最大聚合将表连接回其自身。

select P.pic_id, m.state_id, m.date, st.state_name
from Pictures P
join (select pic_id, max(date) maxdate
from moderation
group by pic_id
) t ON p.pic_id = t.pic_id
join moderation m on P.pic_id = m.pic_id and t.maxdate = m.date
join state st on m.state_id = st.state_id

如果您想要的结果包括所有图片(即使是没有状态的图片),那么您需要使用外连接

<小时/>

编辑:如果您担心潜在的联系,这是 MySQL 使事情变得更容易的一次,因为您可以添加一个 group by 它将返回一个随机状态:

select P.pic_id, m.state_id, m.date, st.state_name
from Pictures P
join (select pic_id, max(date) maxdate
from moderation
group by pic_id
) t ON p.pic_id = t.pic_id
join moderation m on P.pic_id = m.pic_id and t.maxdate = m.date
join state st on m.state_id = st.state_id
group by p.pic_id

关于mysql - 多对多不同行(基于日期的最后一行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23773168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com