группировка по дате и два разных времени в одну и ту же дату в Sql

#python #sql #postgresql #datetime #where-clause

#python #sql #postgresql #дата и время #where-предложение

Вопрос:

я хочу выбрать из своей базы данных данные, которые

МЕЖДУ датой и двумя разными временами в одну и ту же дату

но когда я использую сумму в одном из вариантов, это дает мне неправильный результат

я думаю, что проблема заключается в группе по

это мой пример

 date_0 = str(self.dateEdit_49.text())
        date_1 = str(self.dateEdit_47.text()) 

        selected_day = self.dateEdit_49.date()
        last_day = selected_day.addDays(-1)
        last_day_str = last_day.toString(self.dateEdit_49.displayFormat())

'''SELECT date_d, SUM(montant) FROM transactions 
WHERE (date_d, time_d) > (%s::date, '16:00:00'::time) 
AND (date_d, time_d) < (%s::date, '16:00:00'::time) 
GROUP BY (date_d)''',(last_day_str, date_1))
  

как я могу сгруппировать результат по дате, но дата похожа на это изображение введите описание изображения здесь

Ответ №1:

Кажется, вы хотите:

 SELECT date_d, SUM(montant) 
FROM transactions 
WHERE date_d   time_d > %s::date   '16:00:00'::time
  AND date_d   time_d < %s::date   '16:00:00'::time
GROUP BY date_d
  

Если вы хотите сгенерировать группы строк, которые начинаются с 4 часов дня до следующего дня в 4 часа дня, тогда мы можем сместить даты. Для этого пригодится подзапрос:

 SELECT new_dt, SUM(montant) 
FROM (
    SELECT t.*, date_d   time_d - interval '16 hour' new_dt 
    FROM transactions t
) t
WHERE new_dt > %s::date
  AND new_dt < %s::date
GROUP BY new_dt