繁体   English   中英

postgresql 查询结果使用where条件另一个查询

[英]postgresql query result using where condition another query

我的目标是检测所有用户名并计算每个用户名在 24 小时内的登录时间。 我是单独的仪式代码,但我不能把它结合起来。

SELECT
   DISTINCT "username"
FROM
   my_table;

我的第二个查询是让我计数与此用户名相关的日志

select count(*) 
from my_table as "foo" where "username" = 'example_username' and  "foo"."timestamp" BETWEEN NOW() - INTERVAL '24 HOURS' AND NOW()

我想写一个查询这个查询检测唯一/不同的用户名并为我返回每个用户名的最近 24 小时日志

如果我们认为这个查询返回一个变量列表

SELECT
   DISTINCT "username"           
FROM
   my_table;

变量列表 =(用户名 1,用户名 2,...)

为 variable_list 中的每个用户名运行该查询

select count(*) 
from my_table as "foo" where "username" = 'example_username' and  "foo"."timestamp" BETWEEN NOW() - INTERVAL '24 HOURS' AND NOW()

我怎样才能做到这一点? 解决这个问题的正确方法是什么?

我想你只想要一个WHERE子句。 假设您没有未来的时间戳:

SELECT DISTINCT username         
FROM my_table
WHERE timestamp >= NOW() - INTERVAL '24 HOURS' ;

如果要统计最近 24 小时内的用户数,请使用聚合:

SELECT username, COUNT(*) FILTER (WHERE timestamp >= NOW() - INTERVAL '24 HOURS')     
FROM my_table
GROUP BY username;

使用 CTE 制作用户列表,然后只使用带有聚合的左连接。

WITH user_list as (SELECT
   DISTINCT "username"
   FROM
   my_table)
SELECT 
  user_list."username"
  ,count(*) 
FROM user_list 
LEFT JOIN my_table as "foo" 
   ON "foo"."username"=user_list."username"
WHERE  "foo"."timestamp" BETWEEN NOW() - INTERVAL '24 HOURS' AND NOW()
GROUP BY user_list."username"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM