Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nieznana kolumna w podzapytaniu mysql

Nie jestem ekspertem MySQL (w MS SQL można to zrobić łatwiej), a twoje pytanie wydaje mi się trochę niejasne, ale wygląda na to, że próbujesz uzyskać średnią z poprzednich 5 pozycji.

Jeśli masz identyfikator bez luk , to proste:

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

Jeśli nie , spróbowałem wykonać to zapytanie w ten sposób

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 mam wyjątek Unknown column 'p.id' in 'where clause' . Wygląda na to, że MySQL nie może obsłużyć 2 poziomów zagnieżdżenia podzapytań. Ale możesz uzyskać 5 poprzednich elementów za pomocą offset , tak:

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

demonstracja skrzypiec sql



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę dołączyć ciąg do istniejącego pola w MySQL?

  2. Dlaczego mój PDO nie działa?

  3. Naturalne sortowanie SQL ORDER BY

  4. Przywróć zamówienia woocommerce

  5. Klucz obcy MySQL ON DELETE CASCADE w 3 tabelach