#sql #sqlite
#sql #sqlite
Вопрос:
У меня есть эта таблица :
------------------------------------
DATEHOUR | FRUITS
------------------------------------
2020-11-24 00:00 | 10
2020-11-24 00:15 | 10
2020-11-24 01:00 | 30
2020-11-24 01:15 | 10
2020-11-24 02:00 | 30
2020-11-24 02:15 | 10
2020-11-25 00:00 | 30
2020-11-25 00:15 | 10
2020-11-25 01:00 | 30
2020-11-25 01:15 | 10
2020-11-25 02:00 | 30
2020-11-25 00:15 | 10
------------------------------------
Мне нужно рассчитать СУММУ ФРУКТОВ за каждый ДЕНЬ, сгруппированных по диапазонам, первая полоса (B1) находится между 00:00 И 01:00, вторая (B2) — между 01:15 И 02:00
DAY | B1 | B2
------------------------
2020-11-24 | 50 | 60
2020-11-25 | 40 | 80
Возможно ли это сделать с помощью простого SQL-запроса? Я использую SQLITE
Спасибо
Комментарии:
1. Принятый вами ответ вернет неправильные результаты, когда время будет 01:00:00
Ответ №1:
Вы можете использовать условную агрегацию. Учитывая структуру первого столбца, строковых функций достаточно для логики поворота:
select substr(datehour, 10) as day,
sum(case when substr(datehour, 12, 2) = '00' then fruits else 0 end) as hour_00,
sum(case when substr(datehour, 12, 2) = '01' then fruits else 0 end) as hour_01
from t
group by day;
Ответ №2:
Вы можете сделать это с помощью функций datetime SQLite и условной агрегации:
SELECT DATE(DATEHOUR) DAY,
SUM(CASE WHEN TIME(DATEHOUR) BETWEEN '00:00:00' AND '01:00:00' THEN FRUITS END) B1,
SUM(CASE WHEN TIME(DATEHOUR) BETWEEN '01:15:00' AND '02:00:00' THEN FRUITS END) B2
FROM tablename
GROUP BY DAY
Смотрите демонстрацию.
Результаты:
> DAY | B1 | B2
> :--------- | -: | -:
> 2020-11-24 | 50 | 40
> 2020-11-25 | 80 | 40