#mysql #sql #sql-server #amazon-redshift
#mysql #sql #sql-сервер #amazon-redshift
Вопрос:
Я хотел бы показать совокупный рост показателя по дате, а также группировку по дате, чтобы дата встречалась в таблице только один раз
У меня есть следующий набор данных:
данные = [{‘date’:’2016-01-01′,’value’:’1′},{‘date’:’2016-01-01′,’value’:’3′},{‘date’:’2016-01-02′,’value’:’3′},{‘date’:’2016-01-02′,’значение’:’2′}]
Следующий запрос создает приведенную ниже таблицу:
select
date,
sum(value) over (order by date rows unbounded preceding) as value
from data
group by
date,
value
Ниже приведена моя таблица
date value
2016-01-01 1
2016-01-01 4
2016-01-02 7
2016-01-02 9
Тем не менее, я хочу создать следующую таблицу:
date value
2016-01-01 4
2016-01-02 9
Когда я пытаюсь выполнить следующий запрос и не группирую по значению, я получаю приведенную ниже ошибку:
select
date,
sum(value) over (order by date rows unbounded preceding) as value
from data
group by
date
ОШИБКА:
столбец «значение» должен отображаться в предложении GROUP BY или использоваться в агрегатной функции
Комментарии:
1. mysql или sql-сервер?
2. Почему вы пометили это как MySQL, SQL Server И Redshift? Какой из них вы используете?
Ответ №1:
Может быть, суммировать значения по датам перед вычислением текущего итога?
select date,
sum(value) over (order by date) as value
from (
select date, sum(value) as value
from data
group by date
) t
Ответ №2:
Самое простое, что я мог придумать, это удалить строки, не связанные с предыдущими, и включить distinct .
SELECT DISTINCT
[date]
,SUM([value]) OVER (ORDER BY [date]) AS [value]
FROM @tbl
Тем не менее, вы также можете выполнить подзапрос с помощью row_number .
SELECT
[date]
,[value]
FROM (
SELECT
[date]
,SUM([value]) OVER (ORDER BY [date]) AS [value]
,ROW_NUMBER() OVER (PARTITION BY [date] ORDER BY [value] DESC) AS [row]
FROM @tbl
) tbl
WHERE [row] = 1