sql >> Databáze >  >> RDS >> Mysql

Neznámý sloupec v poddotazu mysql

Nejsem odborník na MySQL (v MS SQL by to šlo udělat jednodušeji) a vaše otázka pro mě vypadá trochu nejasně, ale vypadá to, že se snažíte získat průměr z předchozích 5 položek.

Pokud máte ID bez mezer , je to snadné:

select
    p.id,
    (
        select avg(t.deposit)
        from products as t
        where t.itemid = 1 and t.id >= p.id - 5 and t.id < p.id
    ) as avgdeposit
from products as p
where p.itemid = 1
order by p.id desc
limit 15

Pokud ne , pak jsem zkusil tento dotaz udělat takto

select
    p.id,
    (
        select avg(t.deposit)
        from (
            select tt.deposit
            from products as tt
            where tt.itemid = 1 and tt.id < p.id
            order by tt.id desc
            limit 5
        ) as t
    ) as avgdeposit
from products as p
where p.itemid = 1
order by p.id desc
limit 15

Ale mám výjimku Unknown column 'p.id' in 'where clause' . Vypadá to, že MySQL nezvládne 2 úrovně vnoření poddotazů. Ale můžete získat 5 předchozích položek s offset , takto:

select
    p.id,
    (
        select avg(t.deposit)
        from products as t
        where t.itemid = 1 and t.id > coalesce(p.prev_id, -1) and t.id < p.id
    ) as avgdeposit
from 
(
    select
        p.id,
        (
            select tt.id
            from products as tt
            where tt.itemid = 1 and tt.id <= p.id
            order by tt.id desc
            limit 1 offset 6
        ) as prev_id
    from products as p
    where p.itemid = 1
    order by p.id desc
    limit 15
) as p

ukázka houslí sql



  1. Zobrazení seznamu PostgreSQL

  2. PSQLException:ERROR:vztah TABLE_NAME neexistuje

  3. Pole načítání MySQL přidává duplicitní hodnoty?

  4. Jak zastavit nebo ovládat značky při kontrole chyb v Microsoft Access