Найти шаблон по двум строкам, а затем измерить время между MYSQL

0
Data Table 
id dessert    time   user
1  eclair     10:00  Jon
2  banana     10:00  Mark
3  eclair     10:00  Paul
4  chocolate  08:00  Paul
5  eclair     10:00  Paul
6  chocolate  17:00  Jon
7  banana     21:00  Jon
8  eclair     21:00  Jon

Я стремлюсь получить среднее время, за каждого пользователя, что от них требуется десерт "шоколад" к десерту "эклер". В приведенном примере, он взял бы Пол два часа, в то время как Джон принимал четыре. Строки не обязательно рядом друг с другом.

  • 1
    Что вы пытались решить до сих пор? Вы не задали конкретный вопрос о том, какую часть решения этого вы не понимаете.
  • 0
    Спасибо, что указал на это, Люркер. Я действительно не знаю, как к этому подойти, кроме первоначального выбора «шоколада», а затем, возможно, подзапроса к «эклеру», я не пытаюсь быть тупым, я просто не знаю, с чего начать. Я могу сам поработать над сложением / вычитанием даты и времени, но получить запрос, чтобы найти значение, а затем найти второе значение, я не знаю, как это сделать в MySQL.
Показать ещё 1 комментарий
Теги:

2 ответа

1

Я бы просто использовал условную агрегацию:

select user,
       min(case when dessert = 'chocolate' then time end) as chocolate_time,
       max(case when dessert = 'eclair' then time end) as eclair_time,
       timediff(min(case when dessert = 'chocolate' then time end) as chocolate_time,
                max(case when dessert = 'eclair' then time end) as eclair_time
               ) as diff
from t
group by user;

Это время между первым появлением шоколада и последним появлением эклера.

0

Это предполагает, что любой данный пользователь имеет не более одного шоколада и одного эклера:

SELECT
    Chocolate.[user] AS Dessert_User,
    CONCAT(DATEPART(HOUR,DATEDIFF(HH, Chocolate.[time], Eclair.[time])),
                        ':', DATEPART(MINUTE,DATEDIFF(HH, Chocolate.[time], Eclair.[time]))) AS Time_Taken
FROM
    (
    SELECT
        dessert,
        [time],
        [user]
    FROM    
        table 
    WHERE 
        dessert = 'chocolate'
    ) AS Chocolate
JOIN
    (
    SELECT
        dessert,
        [time],
        [user]
    FROM    
        table 
    WHERE 
        dessert = 'eclair'
    ) AS Eclair
ON
    Chocolate.[user] = Eclair.[user]

Отредактировано, потому что я понял, что я использовал синтаксис SQL Server, который, как я думаю, не работает в MySQL.

Ещё вопросы

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