我有一个表,其中包含用户的详细信息(名字,姓氏等),以及第二个表,其中包含每个用户的操作(IP)如何获取与系统的最后100个连接?
谢谢
答案 0 :(得分:1)
您需要在两个表和Top子句(SQL Server)或Limit子句(Mysql)之间进行联接
select distinct Top 100 ua.column1,ua.column2 from user_actions ua
inner join users u on ua.user_id = u.id;
对于mysql
select distinct ua.column1,ua.column2 from user_actions ua
inner join users u on ua.user_id = u.id
Limit 100;
答案 1 :(得分:0)
如果使用UserActions表上的FOREIGN KEY将表联接在一起,则可以执行简单的查询:
select * from user_actions
inner join users on user_actions.user_id = users.id;
但是,如果没有联接,则可以在代码中获取所有用户,并遍历每个用户并获取其操作(不确定是否可以在SQL中进行此操作,但可以在PHP等中进行此操作)
答案 2 :(得分:0)
可能是这样,如果可以提供示例数据并且表的数据结构可以给出特定的答案,我就假设需要基本数据。有很多功能,例如density_rank,rank,rownumber或简单的order by子句,您可以使用我刚刚展示的一种方法。
drop table user_action;
drop table user_detail;
create table user_detail(userid NUMBER,username varchar2(100));
create table user_action(userid number,ipaddress varchar2(500),timestmp date);
insert into user_detail values (1,'ABC');
insert into user_detail values (2,'PQR');
insert into user_action values (1,'google.com',sysdate);
insert into user_action values (1,'google.com',sysdate-1);
insert into user_action values (1,'google.com',sysdate-2);
select * from (
select userid, ipaddress, timestmp, row_number()
over (partition by ipaddress order by timestmp desc) rn
from user_detail
join user_action using (userid))
where rn <= 100;
问候 巴努