Запрос Sqlite для получения суммарных значений временных диапазонов часов

#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