您有以下架构
-- Accounts ----
[id] name
----------------
20 BigCompany
25 SomePerson
-- Followers -------
[id follower_id]
--------------------
20 25
-- Daily Metrics --------------------------------
[id date ] follower_count media_count
-------------------------------------------------
25 2015-10-07 350 24
25 2015-10-13 500 27
25 2015-10-12 480 26
我想要一个特定帐户的所有关注者列表,返回最新的follower_count
。我已经尝试了JOIN,相关子查询等,但没有一个适合我。
BigCompany
的关注者的预期结果:
id username follower_count media_count 'last_checked'
---------------------------------------------------------------
25 SomePerson 500 27 2015-10-13
答案 0 :(得分:1)
执行一些JOIN
,使用NOT EXISTS
排除较旧的指标:
select a1.id, a1.name, dm.follower_count, dm.media_count, dm.date as "last_checked"
from Accounts a1
join Followers f on f.follower_id = a1.id
join Accounts a2 on f.id = a2.id
join DailyMetrics dm on dm.id = a1.id
where a2.name = 'BigCompany'
and not exists (select 1 from DailyMetrics
where id = dm.id
and date > dm.date)
答案 1 :(得分:0)
试试这个:
SELECT DISTINCT
a.id,
a.name AS username,
d.media_count,
d.date AS last_checked
FROM Accounts AS a
INNER JOIN Followers AS f ON a.id = f.follower_id
INNER JOIN DailyMetrics AS d ON d.id = f.follower_id
INNER JOIN
(
SELECT id, MAX(date) AS MaxDate
FROM DailyMetrics
GROUP BY id
) AS dm ON d.date = dm.maxdate
WHERE f.id = 999 ;
子查询:
SELECT id, MAX(date) AS MaxDate
FROM DailyMetrics
GROUP BY id
将获取每个id
的最新日期,然后使用表JOIN
DailyMetrics
将消除除最近日期之外的所有行。
这会给你:
| id | name | media_count | date |
|----|------------|-------------|---------------------------|
| 25 | SomePerson | 27 | October, 13 2015 00:00:00 |
答案 2 :(得分:0)
With Id_max as
(Select id, max(date) As MaxDate
From DailyMetrics
Group By id)
Select
a.id,
a.name As username,
d.follower_count As MediaCount,
d.date As last_checked
From Accounts As a
join Followers As f ON a.id = f.follower_id
join DailyMetrics As d ON d.id = f.follower_id
join id_max on id_max.id=a.id and MaxDate=date
Where f.id = "WhatYouWant"