Получение неизвестного столбца в предложении при попытке получить последнюю запись - PullRequest
0 голосов
/ 28 января 2020

У меня есть две таблицы orders и order_items Я пытаюсь получить последние order_sum для каждого дня, используя внутреннее соединение, но я сталкиваюсь с ошибкой во втором соединении.

Неизвестный столбец 'o.last_order_date' in 'в предложении

Вот мой запрос

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          |
+---------------+-----------------+-------------------+---------------------+----------------+

Вот скрипка со схемой http://sqlfiddle.com/#! 9 / bf799d / 6

Ответы [ 3 ]

1 голос
/ 28 января 2020

Вы уже задавали этот вопрос в своем предыдущем вопросе, вы были почти там со вторым внутренним соединением

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);
0 голосов
/ 28 января 2020

Вы можете использовать коррелированный подзапрос здесь:

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 .

0 голосов
/ 28 января 2020

агрегированный столбец еще нельзя использовать в условии соединения. Вы можете попытаться сделать это с помощью подвыбора

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


Результат: http://sqlfiddle.com/#! 9 / bf799d / 16

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...