如何为每一行编写一个 SQL 查询加入日期时间
How to write an SQL query joining on datetime for each row
我有以下新闻数据(每篇文章都有发布日期和时间)和观点(在特定时间戳记录每个观点):
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 天内的浏览量。
你需要这样的东西
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
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
- 此处Inner Join获取post.
的所有浏览记录
- Date() 函数仅从 DATETIME 列
获取日期值
- 我检查了WHERE子句中,如果发布日期和查看日期相同以过滤掉其他日期
- 然后GROUP BY会统计浏览量记录,只针对发布日
我有以下新闻数据(每篇文章都有发布日期和时间)和观点(在特定时间戳记录每个观点):
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 天内的浏览量。
你需要这样的东西
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
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
- 此处Inner Join获取post. 的所有浏览记录
- Date() 函数仅从 DATETIME 列 获取日期值
- 我检查了WHERE子句中,如果发布日期和查看日期相同以过滤掉其他日期
- 然后GROUP BY会统计浏览量记录,只针对发布日