gpt4 book ai didi

php - SQL Server 选择具有相同最后操作的行列表

转载 作者:行者123 更新时间:2023-12-02 22:43:43 24 4
gpt4 key购买 nike

我有 table :

id | uid | action
-----------------
1 | 1 | 2
2 | 3 | 1
3 | 2 | 2
4 | 3 | 2
5 | 1 | 1

如何为示例 1 选择带有最后一个操作的 uid?在这种情况下,只有最后一行。

更新: 正如您看到的,对于 uid=3,我们首先有 action=1,然后是 action=2,这意味着 uid=3 对我们来说不是“好”行。但是对于 uid=1,最后一个 Action 是 1,所以那条“好”线。

UPDATE2:action=1 是进入,action=2 是退出。最后,我需要获取正在构建的用户列表,或者至少是每个用户的最后操作列表。

最佳答案

编辑:我在回答的末尾添加了一些解释。

DECLARE @Test TABLE(
id INT,
[uid] INT,
[action] INT
);

INSERT @Test(id , [uid] , [action])
SELECT 1 , 1 , 2
UNION ALL
SELECT 2 , 3 , 1
UNION ALL
SELECT 3 , 2 , 2
UNION ALL
SELECT 4 , 3 , 2
UNION ALL
SELECT 5 , 1 , 1;

DECLARE @last_action INT;
SET @last_action = 1; --or = 2
SELECT x.uid
FROM
(
SELECT t.uid,
t.action,
ROW_NUMBER() OVER(PARTITION BY t.[uid] ORDER BY t.id DESC) AS RowNum
FROM @Test t
) x
WHERE x.RowNum = 1
AND x.action = @last_action

结果:

uid         
-----------
1

解释:来自派生表 (...) x 的查询将产生以下结果:

id uid action RowNum
-- --- ------ ------
5 1 1 1 <-- last action (1) for uid = 1
1 1 2 2
-- --- ------ ------
3 2 2 1 <-- last action (2) for uid = 2
-- --- ------ ------
4 3 2 1 <-- last action (2) for uid = 3
2 3 1 2
-- --- ------ ------

关于php - SQL Server 选择具有相同最后操作的行列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10362705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com