Моя проблема: у меня есть таблица с ценой и датой. Мне нужно иметь среднюю цену за последние 7 дней. Например: у меня есть цены с сегодняшнего дня, вчера, 30 дней назад, 43 дня назад и т.д. Мне нужен средний не за последние 7 дней, а за последние 7 дней.
Мой код:
SELECT AVG(price)
FROM table
GROUP BY date
ORDER BY date DESC LIMIT 7
Но у меня есть 7 средняя цена за каждый день. Может быть, у кого-то есть другая идея
Используйте подзапрос, чтобы получить последние 7 существующих дней, получить самую раннюю из этих дат, а затем join
этой таблице.
SELECT AVG(price)
FROM table AS t1
JOIN (SELECT MIN(dateday) AS mindate
FROM
(SELECT DATE(date) AS dateday
FROM table
GROUP BY dateday
ORDER BY dateday DESC LIMIT 7
) AS x
) AS t2
ON t1.date >= t2.mindate
использовать функцию avg
и подзапрос
select avg(price)
from
(SELECT date,price
FROM table
ORDER BY date desc limit 7
) as t
date
илиdatetime
-datetime
? Если этоdatetime
иdatetime
, вы можете попытаться бросить дату Дату с CAST.postgresql
,oracle
,db2
,sql-server
, ...