Как написать SQL-запрос, объединяющий дату и время для каждой строки - PullRequest
3 голосов
/ 19 июня 2019

У меня есть следующие данные с новостями (каждая статья с датой и временем публикации) и просмотрами (запись каждого просмотра с определенной отметкой времени):

news

id, published_timestamp
1, 2018-11-16 13:30:24
2, 2018-12-03 13:59:56
...
views

view_id, post_id, viewed_timestamp
a, 1, 2018-11-16 13:30:24
b, 1, 2018-11-16 13:30:25
c, 1, 2018-11-16 13:30:26
d, 2, 2018-12-03 13:59:56
e, 2, 2018-12-03 13:59:57
f, 2, 2018-12-05 13:59:57
...

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

SELECT 
post_id, count(view_id) 
FROM views 
GROUP BY post_id

Как мне написать SQL-запрос (я использую AWS Redshift), который может объединять представления относительно опубликованной даты и времени? Например, я хочу получить только просмотры для каждой статьи в течение 1 дня с момента ее публикации.

Ответы [ 2 ]

2 голосов
/ 19 июня 2019

Вам нужно что-то вроде этого

select n.id, n.published_timestamp,
       count(v.post_id) as views__within_1_day_of_post
from news as n
left join views as v on n.id=v.post_id 
                    and v.viewed_timestamp between n.published_timestamp and n.published_timestamp + interval '1 day'
group by 1, 2
0 голосов
/ 19 июня 2019
SELECT V.post_id,  count(V.view_id)
FROM views as V INNER JOIN news as N on N.id = V.post_id
WHERE Date(N.published_timestamp) = Date(V.viewed_timestamp)
GROUP BY V.post_id
  1. Здесь Inner Join получает все записи просмотров поста.
  2. функция Date () получает значение Date только из DATETIME Столбец
  3. в предложении WHERE Я проверил, совпадают ли дата публикации и дата просмотра, чтобы отфильтровать другие дни
  4. , тогда GROUP BY будет считать записи просмотров, что только за опубликованный день
...