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

nfs0ujit  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(259)

我的目标是在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;

变量\u list=(用户名1,用户名2,…)
对变量列表中的每个用户名运行该查询

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

你怎么能ı 你这么做?解决这个问题的正确方法是什么?

mzillmmw

mzillmmw1#

使用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"
vpfxa7rd

vpfxa7rd2#

我想你只是想 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;

相关问题