我正在尝试使用以下命令获取narendramodi的Twitter数据。
SELECT b.t_id,a.profile_image,b.tweet_text,e.media_media_url,b.retweet_count,b.favorite_count as like_count,count(reply_to_status_id) as reply_count,f.tweet_impression_count,f.tweet_engagement_count,f.tweet_engagement_rate
FROM twitter_users a LEFT JOIN twitter_tweets b on a.user_id=b.user_id
LEFT JOIN twitter_tweet_replies c on b.t_id = c.t_id
LEFT JOIN twitter_tweet_media e on b.t_id = e.t_id
LEFT JOIN twitter_tweet_metric_aggregates f on f.metric_timestamp=
(select max(metric_timestamp) FROM twitter_tweet_metric_aggregates g
WHERE g.t_id=f.t_id and g.t_id=b.t_id)
WHERE a.twitter_screen_name= 'narendramodi'
GROUP BY b.t_id,a.profile_image
,b.tweet_text,b.retweet_count,b.favorite_count,
e.media_media_url,f.imp_count,f.eng_count,f.eng_rate);
查询工作正常,但是,在上面的查询中,我使用了子选择以基于时间戳获取imp_counts的最新数据。由于Query_cost很大,因此执行查询要花费15分钟以上。我想减少这种情况,应该能够在10秒内执行。因此,我试图使用WITH(CTE)表达式。
在这里
WITH metric_counts AS (
SELECT max(metric_timestamp),f.t_id
FROM twitter_tweet_metric_aggregates f LEFT JOIN twitter_tweets b on
f.t_id=b.t_id
)
SELECT
b.t_id,a.profile_image,b.tweet_text,e.media_media_url,b.retweet_count
,b.favorite_count as like_count, count(reply_to_status_id) as
reply_count,metric_counts.imp_count
,metric_counts.eng_count,metric_counts.eng_rate
FROM twitter_users as a
LEFT JOIN twitter_tweets as b on a.twitter_user_id=b.twitter_user_id
LEFT JOIN twitter_tweet_replies c on b.t_id = c.t_id
LEFT JOIN twitter_tweet_media e on b.t_id = e.t_id
LEFT JOIN metric_counts on metric_counts.t_id = b.t_id WHERE
lower(a.twitter_screen_name)=lower('narendramodi')
GROUP BY b.t_id,a.profile_image,b.tweet_text,e.media_media_url,
b.retweet_count,b.favorite_count,
metric_counts.imp_count,metric_counts.eng_count,
metric_counts.eng_rate;
该查询正在执行,但未提供该特定表中的imp_count,eng_count,eng_rate值。
注意:如果我删除该次选择查询,则该查询将在10秒内执行。但是,我希望也将其包括在内。为此,我使用了WITH但失败了。所以任何人都可以帮助我了解如何使用WITH表达式编写第一个查询。