如何使用特定的列值在msql中查找最新的行

eqfvzcg8  于 2021-08-09  发布在  Java
关注(0)|答案(5)|浏览(255)

我有一个名为access\u status的表,其中包含如下值:

我希望该表只返回活动用户,即tom sullivan和john martin。
它不应该返回marta jenkins的活动行,因为marta实际上是挂起的。
最好的方法是什么?

flmtquvp

flmtquvp1#

您可以按每行筛选最新的行 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 作为最后一列,索引可能也会有所帮助。

h7appiyu

h7appiyu2#

最新的行列表 "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'
-- if the intent is to have latest rows that are NOT 'SUSPENDED'
-- AND ast1.Access <> 'SUSPENDED'
;
ukxgm1gy

ukxgm1gy3#

获取活跃用户的方法之一:

select A.* from Access_Status A where A.Access = 'ACTIVE' 
and A.Name not in (select Name from Access_Status WHERE Access != 'ACTIVE');
7xllpg7q

7xllpg7q4#

谢谢你的努力。事实上,我意识到我没有提供足够的信息。有一个额外的列“结束日期”,对于所有活动用户都为空。所以我可以使用access='active'并且结束日期为空

q1qsirdb

q1qsirdb5#

这种方法可以帮助您根据需要获取行

SELECT * FROM Access_Status GROUP BY Name WHERE Access="ACTIVE";

相关问题