Mysql 尝试获取最新记录时在on子句中获取未知列
我有两个表orders和order_项我试图使用内部联接获取每天的最后一个order_和,但在第二个联接中遇到错误 on子句中的未知列“o.last\u order\u date” 这是我的问题Mysql 尝试获取最新记录时在on子句中获取未知列,mysql,sql,database,Mysql,Sql,Database,我有两个表orders和order_项我试图使用内部联接获取每天的最后一个order_和,但在第二个联接中遇到错误 on子句中的未知列“o.last\u order\u date” 这是我的问题 select date(o.created_at) date_of_month, sum(o.order_sum) as total_order_sum, sum(i.total_energy_used) as total_energy_used, max(o.crea
select
date(o.created_at) date_of_month,
sum(o.order_sum) as total_order_sum,
sum(i.total_energy_used) as total_energy_used,
max(o.created_at) as last_order_date,
o2.order_sum as last_order_sum
from orders o
inner join (
select order_id, sum(energy_used) total_energy_used
from order_items i
group by order_id
) i on o.id = i.order_id
inner join (
select created_at, order_sum from orders
) o2 on o2.created_at = o.last_order_date
group by date(o.created_at)
这是我想要得到的结果
+---------------+-----------------+-------------------+---------------------+----------------+
| date_of_month | total_order_sum | total_energy_used | last_order_date | last_order_sum |
+---------------+-----------------+-------------------+---------------------+----------------+
| 2020-01-25 | 35.13 | 164 | 2020-01-25 15:23:00 | 10.00 |
| 2020-01-26 | 64.00 | 1 | 2020-01-26 19:14:00 | 50.00 |
| 2020-01-27 | 35.00 | 5 | 2020-01-27 11:13:00 | 35.00 |
+---------------+-----------------+-------------------+---------------------+----------------+
这里是对模式的修改
聚合列尚不能在联接条件中使用。 您可以尝试使用子选择来执行此操作
select t.*
,o2.order_sum as last_order_sum
from (
select
date(o.created_at) date_of_month,
sum(o.order_sum) as total_order_sum,
sum(i.total_energy_used) as total_energy_used,
max(o.created_at) as last_order_date
from orders o
inner join (
select order_id, sum(energy_used) total_energy_used
from order_items i
group by order_id
) i on o.id = i.order_id
group by date(o.created_at)
) t
inner join (
select created_at, order_sum from orders
) o2 on o2.created_at =t.last_order_date
结果:您在上一个问题中已经问过这个问题,第二个内部连接就快到了
select
date(o.created_at) date_of_month,
sum(order_sum) as total_order_sum,
sum(i.total_energy_used) total_energy_used,
max(o.created_at) lastorderdate,
max(s.last_order_sum) last_order_sum
from orders o
inner join (
select order_id, sum(energy_used) total_energy_used
from order_items i
group by order_id
) i on o.id = i.order_id
join
(select order_sum last_order_sum,created_at
from orders o
where created_at = (select max(created_at) from orders o1 where date(o1.created_at) = date(o.created_at))
) s on date(s.created_at) = date(o.created_at)
group by date(o.created_at);
您可以在此处使用相关子查询:
select date(o.created_at) date_of_month,
sum(o.order_sum) as total_order_sum,
sum(i.total_energy_used) as total_energy_used,
max(o.created_at) as last_order_date,
(select o1.order_sum
from orders o1 where date(o.created_at) = date(o1.created_at)
order by o1.created_at desc
limit 1
) as last_order_sum
from orders o inner join
(select order_id, sum(energy_used) total_energy_used
from order_items i
group by order_id
) i
on o.id = i.order_id
group by date(o.created_at);
这里是演示 我有点困惑;我觉得我们已经讨论过了,但是你提供了一个fiddle@Strawberry我在学习。除了每天最后一笔订单,我们什么都拿到了。由于某种原因,我仍然无法获取…orders表是否有last_order_date列?@jarlh不,正如您在小提琴中看到的,last_order_date是从内部join派生的列。这些仅在ORDER BY条款中可用。