我有一个名为Access_Status的表,其中包含诸如以下的值:
我希望表仅返回Active用户,即Tom Sullivan和John Martin。
它应该NOT返回Marta Jenkins的活动行,因为Marta实际上已被暂停。
什么是最好的方法?
您可以使用相关的子查询过滤每个name
的最新行,并确保状态为活动:
select a.*
from access_status a
where
t.last_updated_date = (
select max(a1.last_updated_date)
from access_status a1
where a1.initial_id = a.initial_id
)
and a.access = 'ACTIVE'
为了提高性能,您需要在(intial_id, last_updated_date)
上建立索引。将access
作为最后一列添加索引might也很有帮助。
此方法将帮助您根据需要获取行
SELECT * FROM Access_Status GROUP BY Name WHERE Access="ACTIVE";
"ACTIVE"
的最新行列表:
SELECT ast1.*
FROM Access_Status ast1
LEFT JOIN Access_Status ast2 ON
ast1.Initial_ID = ast2.Initial_ID AND ast1.Last_Updated_Date < ast2.Last_Updated_date
WHERE ast2.Initial_ID IS NULL
AND ast1.Access = 'ACTIVE'
;
一种检查方式:
select A.* from Access_Status A where A.Access = 'ACTIVE' and A.Name not in (select Name from Access_Status WHERE Access != 'ACTIVE');