SQL - 为给定列拉取最新的 1 条记录
SQL - pull newest 1 record for given column
我有以下查询,它可以很好地提取有关厨师、他们的菜单和他们销售的食品的信息。
但是,它缺少最后一列,“last_order_placed”
此列需要从 table“订单”列名称“已放置”中提取单个最新(最新)条目。每个特定的商店 (store.id) 每次出售该食品时都会有一个价值 orders.placed。
这是一个 postgresql 13 数据库。
我想添加一列以包含每个商店 (store.id) 的 orders.placed 的最新条目:
select distinct
account.id,
account.email,
account.firstname,
account.lastname,
account.phone,
account.zip_code,
menu.name,
kitchen_item.name,
kitchen_item.price,
kitchen_item.daily_max_orders,
menu.pickup_start_time,
menu.pickup_end_time,
menu.repeat_mon,
menu.repeat_tues,
menu.repeat_wed,
menu.repeat_thurs,
menu.repeat_fri,
menu.repeat_sat,
menu.repeat_sun,
from account
left join store on account.id = store.account_id
left join menu on store.id = menu.store_id
left join kitchen_item on store.id = kitchen_item.store_id
left join menu_item on (kitchen_item.id = menu_item.kitchen_item_id and menu.id = menu_item.menu_id)
left join orders on store.id = orders.store_id
where account.is_seller_fully_registered = True
and account.is_deleted = False
and menu.deleted = False
and menu_item.is_deleted = False
group by account.id, account.email, account.firstname, account.lastname, account.phone, account.zip_code, menu.name, kitchen_item.name, kitchen_item.price, kitchen_item.daily_max_orders, menu.pickup_start_time, menu.pickup_end_time, menu.repeat_mon, menu.repeat_tues, menu.repeat_wed, menu.repeat_thurs, menu.repeat_fri, menu.repeat_sat, menu.repeat_sun
order by account.id asc;
我不知道如何将它与所有其他联接结合起来。我尝试了其他帖子的建议,从我收集到的信息来看,我应该在订单 table 的连接上实施此建议。
类似于:
INNER JOIN (
select MAX (orders.placed) last_order
from orders o on orders.store_id = store.id
)
GROUP BY store.id
有人可以帮我吗?
如果我没理解错的话,你可以用distinct on
:
select distinct on (store_id) . . .
. . .
order by store_id, o.placed desc
您可能不需要 group by
。至少,你的问题没有解释为什么有必要。
我有以下查询,它可以很好地提取有关厨师、他们的菜单和他们销售的食品的信息。
但是,它缺少最后一列,“last_order_placed”
此列需要从 table“订单”列名称“已放置”中提取单个最新(最新)条目。每个特定的商店 (store.id) 每次出售该食品时都会有一个价值 orders.placed。
这是一个 postgresql 13 数据库。
我想添加一列以包含每个商店 (store.id) 的 orders.placed 的最新条目:
select distinct
account.id,
account.email,
account.firstname,
account.lastname,
account.phone,
account.zip_code,
menu.name,
kitchen_item.name,
kitchen_item.price,
kitchen_item.daily_max_orders,
menu.pickup_start_time,
menu.pickup_end_time,
menu.repeat_mon,
menu.repeat_tues,
menu.repeat_wed,
menu.repeat_thurs,
menu.repeat_fri,
menu.repeat_sat,
menu.repeat_sun,
from account
left join store on account.id = store.account_id
left join menu on store.id = menu.store_id
left join kitchen_item on store.id = kitchen_item.store_id
left join menu_item on (kitchen_item.id = menu_item.kitchen_item_id and menu.id = menu_item.menu_id)
left join orders on store.id = orders.store_id
where account.is_seller_fully_registered = True
and account.is_deleted = False
and menu.deleted = False
and menu_item.is_deleted = False
group by account.id, account.email, account.firstname, account.lastname, account.phone, account.zip_code, menu.name, kitchen_item.name, kitchen_item.price, kitchen_item.daily_max_orders, menu.pickup_start_time, menu.pickup_end_time, menu.repeat_mon, menu.repeat_tues, menu.repeat_wed, menu.repeat_thurs, menu.repeat_fri, menu.repeat_sat, menu.repeat_sun
order by account.id asc;
我不知道如何将它与所有其他联接结合起来。我尝试了其他帖子的建议,从我收集到的信息来看,我应该在订单 table 的连接上实施此建议。 类似于:
INNER JOIN (
select MAX (orders.placed) last_order
from orders o on orders.store_id = store.id
)
GROUP BY store.id
有人可以帮我吗?
如果我没理解错的话,你可以用distinct on
:
select distinct on (store_id) . . .
. . .
order by store_id, o.placed desc
您可能不需要 group by
。至少,你的问题没有解释为什么有必要。