Postgresql:如何在聚合函数后显示附加列
我有两个表:用户和会话 用户有以下列:用户名、id 会话有以下列:userid、lastactivityat、deleteat 我希望为每个用户提取具有最近“上次活动日期”会话的所有用户,然后过滤“上次活动日期”早于x天的用户。 “最后一个活动日期”是历元格式的,这就是为什么我要做一些转换计算 这是我当前的请求(x=30) 现在,我想在我的请求结果中添加:每个用户的deleteat列,但我的请求失败了: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(
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;