Я пытаюсь получить данные твиттера narendramodi, используя следующую команду.
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);
Запрос работал правильно, но в приведенном выше запросе я использовал sub-select для получения последних данных 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 из этой конкретной таблицы.
ПРИМЕЧАНИЕ. ЕслиЯ удаляю этот запрос sub-select, который выполнялся в течение 10sec. Но я хочу, чтобы он также был включен.Для этого я использовал WITH, но не смог. Так что кто-нибудь может мне помочь, как написать первый запрос, используя выражение WITH.