Необходимо найти общую сумму (сумму) с 5 вечера в один день до 5 утра на следующий день в MySQL

0

У меня есть таблица MySQL для данных, содержащих прибыль для поездок такси /uber со следующими полями:

id
ride_date 
ride_earnings
ride_tips

Я пытаюсь получить список самых "прибыльных" дат, я могу сделать:

SELECT DATE(ride_date) as d, SUM(ride_earnings+ride_tips) as total, COUNT(id) as ride_count 
FROM rides 
GROUP by d 
ORDER BY total DESC

Но мне нужно сгруппировать их, как все поездки с 12 вечера в один день - 12 вечера на следующий день. Заранее спасибо!

EDIT: изменено с 12p до 12p, чтобы сделать его более простым

EDIT2: Кроме того, я должен был сказать об этом, но я буду тянуть эти данные через PHP, поэтому я бы предпочел это в одном заявлении

  • 0
    Можете ли вы показать нам пример результатов?
  • 0
    Если ride_date является ride_date данных DATE, нет никакого способа узнать, было ли это до или после 5am или 5pm .
Показать ещё 1 комментарий
Теги:

3 ответа

0
Лучший ответ
SELECT
    DATE(ride_date - interval 5 hour) as d,
    SUM(ride_earnings+ride_tips) as total,
    COUNT(id) as ride_count
FROM rides
WHERE time(ride_date) >= '17:00:00' 
   OR time(ride_date) <= '05:00:00' 
GROUP by d
order by total DESC

DATE(ride_date - interval 5 hour) будет считать утренние часы (0:00 - 5:00) днем ранее. Предложение WHERE гарантирует, что будут учитываться только поездки с 17:00 до 24:00 и с 00:00 до 05:00.

Обновить

Примечание. Пожалуйста, не изменяйте свой вопрос таким образом, чтобы недействительные ответы.

SELECT
    DATE(ride_date - interval 12 hour) as d,
    SUM(ride_earnings+ride_tips) as total,
    COUNT(id) as ride_count
FROM rides
GROUP by d
order by total DESC

Здесь первые 12 часов дня будут засчитаны накануне. Предложение WHERE в этом случае не требуется.

  • 0
    Я попытаюсь это сделать. Если мне нужно 12p - 12p, следует ли просто изменить эти значения в предложении WHERE или мне тоже нужно изменить интервал?
  • 0
    @TheJoester Что означает «12p - 12p»? Но я думаю: да, вам тоже нужно изменить интервал.
Показать ещё 3 комментария
0

создайте временную таблицу, содержащую даты, которые вам нужно группировать. например (синтаксис t_sql):

declare @startDate date, @endDate.
select @startDate=min(ride_date), @endDate=max(ride_date) from rides


declare @tempDate date=dateAdd(dd,-1,@startDate)
declare @dateIntervals table(starDT dateTime, endDT dateTime)
while(@tempDate<@endDate) begin
    insert into @dateIntervals
    values(cast(@tempDate as DateTime)+'05:00:00',cast(dateAdd(dd,1,@tempDate) as DateTime)+'05:00:00')
    select @tempDate=dateAdd(dd, 1,@tempDate)
end

select t1.startDT as d, SUM(ride_earnings+ride_tips) as total, COUNT(id) as ride_count 
from @dateIntervals t1
left join rides t2 on t2.ride_date>=t1.startDT and t2.ridetDate<t2.endDT
GROUP by d 
order by total DESC
  • 0
    1 errors were found during analysis. Unrecognized statement type. (near "declare" at position 0)
  • 0
    @TheJoester stackoverflow.com/questions/11754781/…
-2

пытаться:

SELECT DATE(ride_date) as d, SUM(ride_earnings+ride_tips) as total, COUNT(id) as ride_count FROM rides 
WHERE HOUR(ride_date) < 17 AND HOUR(ride_date) > 5
GROUP by d order by total DESC
  • 0
    HOUR(ride_date) > 17 AND HOUR(ride_date) < 5 - Это невозможно.
  • 0
    @PaulSpiegel Не могли бы вы хотя бы объяснить, почему?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню