Мне нужно получить разницу между датой первого платежа и датой регистрации пользователя пользователем - PullRequest
0 голосов
/ 27 мая 2020

У меня две таблицы: платежи, пользователи.

пользователи:

id      regtime
2271    2020-01-17 16:38

платежи:

user_id datetime
2271    2020-03-20 15:11

Мне нужно получить дату первого платежа для каждого пользователя из таблицы payments и дат регистраций (из таблицы users) одних и тех же пользователей и подсчитайте различие для каждого из них в днях и, если возможно, в часах.

Это означает, что мы получим время в днях и часах жизни пользователя на платформе до того, как он совершит первый платеж.

Результат должен выглядеть как таблица с тремя столбцами:

user_id, full_days_before_first_payment, full_hours_before_first_payment

У меня уже есть первая часть запроса, которая возвращает список user_id и соответствующую дату первого платежа:

SELECT user_id, DATE(MIN(datetime)) as First_payment
FROM payments
GROUP BY user_id

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Вам необходимо JOIN обе таблицы в столбце идентификатора пользователя, а также пользовательский regtime и MIN(datetime) платежа для расчетов:

SELECT
  users.id,
  DATE(MIN(payments.datetime)) AS First_payment,
  DATEDIFF( users.regtime, MIN(payments.datetime) ) AS full_days_before_first_payment,
  TIMESTAMPDIFF( HOUR, users.regtime, MIN(payments.datetime) )
FROM
  users LEFT JOIN payments ON ( users.id = payments.user_id )
0 голосов
/ 27 мая 2020

Начиная с существующего запроса, вы можете просто привести таблицу users с join, а затем выполнить вычисление:

select 
    u.id as user_id, 
    timestampdiff(day , u.regtime, min(p.datetime)) as full_days_before_first_payment,
    timestampdiff(hour, u.regtime, min(p.datetime)) as full_hours_before_first_payment
from users u
inner join payments p on p.user_id = u.id
group by u.id, u.regtime
...