Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql:如何在聚合函数后显示附加列_Postgresql_Join_Aggregate Functions_Min - Fatal编程技术网

Postgresql:如何在聚合函数后显示附加列

Postgresql:如何在聚合函数后显示附加列,postgresql,join,aggregate-functions,min,Postgresql,Join,Aggregate Functions,Min,我有两个表:用户和会话 用户有以下列:用户名、id 会话有以下列:userid、lastactivityat、deleteat 我希望为每个用户提取具有最近“上次活动日期”会话的所有用户,然后过滤“上次活动日期”早于x天的用户。 “最后一个活动日期”是历元格式的,这就是为什么我要做一些转换计算 这是我当前的请求(x=30) 现在,我想在我的请求结果中添加:每个用户的deleteat列,但我的请求失败了: select u.username, min(extract(epoch from now(

我有两个表:用户和会话

用户有以下列:用户名、id

会话有以下列:userid、lastactivityat、deleteat

我希望为每个用户提取具有最近“上次活动日期”会话的所有用户,然后过滤“上次活动日期”早于x天的用户。 “最后一个活动日期”是历元格式的,这就是为什么我要做一些转换计算

这是我当前的请求(x=30)

现在,我想在我的请求结果中添加:每个用户的deleteat列,但我的请求失败了:

select u.username, min(extract(epoch from now() - to_timestamp(lastactivityat/1000))/86400::int) as most_recent_inactivity_days, s.deleteat  
from users as u 
  join sessions as s on s.userid=u.id 
where extract(epoch from now() - to_timestamp(lastactivityat/1000))/86400::int >= 30 
group by username 
order by username

请告诉我好吗?

这是一个关于的不同的案例:

SELECT DISTINCT ON (u.username)
       u.username,
       extract(epoch from now() - to_timestamp(lastactivityat/1000))/86400::int AS most_recent_inactivity_days,
       s.deleteat  
FROM users AS u 
   JOIN sessions AS s ON s.userid=u.id 
WHERE extract(epoch from now() - to_timestamp(lastactivityat/1000))/86400::int >= 30
ORDER BY u.username,
         extract(epoch from now() - to_timestamp(lastactivityat/1000))/86400::int;
这个漂亮的查询还显示了为什么将时间戳保存为时间戳而不是整数更好;这样的查询会简单得多

SELECT DISTINCT ON (u.username)
       u.username,
       extract(epoch from now() - to_timestamp(lastactivityat/1000))/86400::int AS most_recent_inactivity_days,
       s.deleteat  
FROM users AS u 
   JOIN sessions AS s ON s.userid=u.id 
WHERE extract(epoch from now() - to_timestamp(lastactivityat/1000))/86400::int >= 30
ORDER BY u.username,
         extract(epoch from now() - to_timestamp(lastactivityat/1000))/86400::int;