SQL选择可见类别中的最新条目
我有一个sql表:SQL选择可见类别中的最新条目,sql,Sql,我有一个sql表: DATE USER FLAGGED COMMAND 1 Alice 0 sudo gparted 2 Bob 1 sudo 3 Bob 0 mv 4 Alice 1 sudo rm -rf 5 Charlie 1 sudo chown 我想选择用户最后标记的
DATE USER FLAGGED COMMAND
1 Alice 0 sudo gparted
2 Bob 1 sudo
3 Bob 0 mv
4 Alice 1 sudo rm -rf
5 Charlie 1 sudo chown
我想选择用户最后标记的操作
DATE USER FLAGGED COMMAND
2 Bob 1 sudo
4 Alice 1 sudo rm -rf
5 Charlie 1 sudo chown
我试过了
select DATE, USER, REQUEST
from
(
select DATE, USER, REQUEST, FLAGGED
row_number() over(partition by USER order by date desc) rn
from USERDATA
) src
where rn = 1 and FLAGGED = 1
但它忽略了鲍勃。如何将“标记的=1”添加到SQL请求中?正确的方法是什么?将标记的条件移动到子查询,以便只检索标记为=1的行,并且您可以选择具有rn=1条件的最新行
select DATE, USER, REQUEST
from
(
select DATE, USER, REQUEST, FLAGGED,
row_number() over(partition by USER order by date desc) rn
from USERDATA
where flagged = 1
) src
where rn = 1
将带标记的条件移动到子查询,这样只会检索带标记=1的行,并且您可以选择带rn=1条件的最新行
select DATE, USER, REQUEST
from
(
select DATE, USER, REQUEST, FLAGGED,
row_number() over(partition by USER order by date desc) rn
from USERDATA
where flagged = 1
) src
where rn = 1
在这里,您首先为用户选择最新的条目,然后删除未标记的条目。相反,您应该首先选择所有标记的条目,然后查找其中最新的条目。这个代码应该可以工作
select DATE, USER, REQUEST
from
(
select DATE, USER, REQUEST, FLAGGED
row_number() over(partition by USER order by DATE desc) rn
from USERDATA WHERE FLAGGED = 1
) src
where rn = 1
在这里,您首先为用户选择最新的条目,然后删除未标记的条目。相反,您应该首先选择所有标记的条目,然后查找其中最新的条目。这个代码应该可以工作
select DATE, USER, REQUEST
from
(
select DATE, USER, REQUEST, FLAGGED
row_number() over(partition by USER order by DATE desc) rn
from USERDATA WHERE FLAGGED = 1
) src
where rn = 1
您还可以使用通用的
MAX
查询:
select DATE, USER, REQUEST
from USERDATA
WHERE (date, user) IN (
select MAX(DATE) as date, USER
from USERDATA
where flagged = 1
group by user
)
AND flagged = 1
但是,请注意,如果有两个用户条目的最大日期相同,则可能返回重复的。。。您可以通过在外部选择上使用最小值或最大值来避免这种情况。您也可以使用通用的
MAX
查询:
select DATE, USER, REQUEST
from USERDATA
WHERE (date, user) IN (
select MAX(DATE) as date, USER
from USERDATA
where flagged = 1
group by user
)
AND flagged = 1
但是,请注意,如果有两个用户条目的最大日期相同,则可能返回重复的。。。您可以通过在外部选择上使用最小值或最大值来避免这种情况。它忽略了Bob,因为标记为1的行是该用户按日期描述订购的第二行。
(按用户按日期描述订购的分区,标记为desc)rn
它忽略了Bob,因为标记为1的行是该用户按日期描述订购的第二行。(按用户订单按日期描述划分,标记描述)rn