2016-05-30 3 views
-4

У меня есть таблица под названиемкомплекс SQL запросов

подписок (user_name VARCHAR (50), VIDEO_NAME VARCHAR (50), дата watched_date)

Ravi     Simsons         2016-01 -01
ravi     dailyshow         2016-02-15
Нитин     dailyshow         2016-02-24
Нитина     Simsons         2016-02-25
СЭМ     Simsons         2016-03-04
Сэм     dailyshow         2016-03-04
мат       Simsons         2016-04-06
cranw   Simsons         2016-04-15
cranw     dailyshow         2016-04-17

Simsons и dailyshow являются названиями видео

Мне нужно найти отличный счет user_names, который смотрел Simsons перед dailyshow.

Я изо всех сил стараюсь сделать заявление о себе и case, но все равно не могу получить правильный запрос.

Пожалуйста, помогите !!!

+0

Что вы пробовали и каковы были ваши результаты? Поместите некоторый код, или еще лучше настройте sqlfiddle – mikeb

ответ

1

Это может быть сделано с отдельными встроенными представлениями для каждого имени video_ и присоединением их к имени пользователя. Затем используйте условие where для условия watched_date.

select count(distinct sdaily.user_name) 
from (select * from subscriptions where video_name = 'simsons') ssim 
join (select * from subscriptions where video_name = 'dailyshow') sdaily 
on sdaily.user_name = ssim.user_name 
where ssim.watched_date < sdaily.watched_date 
+0

Спасибо !!! Это сработало – Ravi

1

Я думаю, что это проще всего с помощью агрегации:

select count(*) 
from (select s.user_name, 
      min(case when s.video_name = 'simsons' then s.watched_date end) as s_date, 
      max(case when s.video_name = 'dailyshow' then s.watched_date end) as ds_date 
    from subscriptions 
    group by s.user_name 
    ) u 
where s_date < ds_date; 
Смежные вопросы