Как выбрать из другой таблицы без дубликатов? - PullRequest
0 голосов
/ 02 сентября 2018

У меня такой запрос:

SELECT activity.login_time, sum(activity.sessions) FROM activity 
inner JOIN payments ON payments.user_id = activity.user_id
WHERE activity.login_time BETWEEN '2018-04-05' and '2018-04-18' 
GROUP BY activity.login_time;

У меня есть две таблицы (столбцы: активность (user_id, сеансы, login_time) и платежи (столбец: user_id). Вторая имеет повторяющиеся значения. Нужно выбрать сеансы для user_id из «платежей» без дубликатов.

Мой вариант не избегает дубликатов. Что я должен исправить в своем запросе?

Спасибо!

activity
user_id login_time  sessions
101 2018-04-11  4
102 2018-04-02  1
103 2018-04-15  3
104 2018-04-06  2
104 2018-04-05  6
105 2018-04-16  1
105 2018-04-04  6
105 2018-04-01  14
106 2018-04-19  5
106 2018-04-17  3
106 2018-04-16  3
106 2018-04-15  4
106 2018-04-13  2

Платежи

user_id
101
103
104
106

выход

login_time  sessions
2018-04-05  ?
2018-04-06  ?
2018-04-07  ?
2018-04-08  ?
2018-04-09  ?
2018-04-10  ?
2018-04-11  ?
2018-04-12  ?
2018-04-13  ?
2018-04-14  ?
2018-04-15  ?
2018-04-16  ?
2018-04-17  ?
2018-04-18  ?

1 Ответ

0 голосов
/ 02 сентября 2018

Мне кажется из вашего описания вы хотите агрегирование пользователей

    SELECT 
        a.user_id,
        SUM(a.sessions) as user_session
    FROM 
        activity a
    INNER JOIN 
        payments p ON p.user_id = a.user_id
    WHERE 
        a.login_time BETWEEN '2018-04-05' AND '2018-04-18' 
    GROUP BY 
        a.user_id;

Но если вы хотите указать дату входа с суммой для каждого пользователя, используйте подзапрос

SELECT
    a1.login_time, t1.user_session  
FROM
    activity a1 
INNER JOIN
    (SELECT 
         a.user_id,
         AVG(a.sessions) AS user_session
     FROM 
         activity a
     INNER JOIN 
         payments p ON p.user_id = a.user_id
     WHERE 
         a.login_time BETWEEN '2018-04-05' AND '2018-04-18' 
     GROUP BY 
         a.user_id) AS t1 ON a1.user_id = t1.user_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...