2016-03-08 3 views
0

У меня есть стол friends: user_id friend_id date. Это строка означает: user_id Добавить друга в какую-то датуMySql нетривиальный select

Мне нужно сделать запрос: Получить пользователей, по каждому их запросу у них есть ответ.

получить все пользовательские x: для всех (х, у, дата) => (у, х, date2): date2> Дата

Я пытался написать запрос, она должна работать во всех случаях?

select f.user_id from friend f 
group by f.user_id 
having 
    (select count(f2.user_id) from friend f2 
     where f2.date > f.date and f2.friend_id = f.user_id 
     group by (f.friend_id)) = count(f.friend_id) 

Мои умения sql - это плохо.

+0

Может быть, вы могли бы поставить образцы данных и ожидаемых результатов. Одна из проблем, связанных с вашим запросом, - «иметь», появляется после «group by». – sgeddes

+0

Какой результат вы хотите? –

+0

@ Список пользователей Bernd Buffen, каждый из которых имеет для каждого запроса тот же пользователь, обратный запрос от этого пользователя. – punksta

ответ

1

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

SELECT 
    f.user_id 
FROM friend f 
LEFT JOIN friend f2 ON 
    f.friend_id = f2.user_id 
AND 
    f2.friend_id = f.user_id 
AND 
    f2.date > f.date 
GROUP BY 
    f.user_id 
HAVING 
    count(f.user_id) = count(f2.user_id); 

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

+0

выглядит как справа. – punksta

Смежные вопросы