我有一个带有PostgreSQL 8.4的服务器,每晚01:00会重新启动(不要问为什么),我需要获取连接用户的列表(即他们的时间戳为u.login > u.logout
):
SELECT u.login, u.id, u.first_name
FROM pref_users u
WHERE u.login > u.logout and
u.login > now() - interval '24 hour'
ORDER BY u.login;
login | id | first_name
----------------------------+----------------+-------------
2012-03-14 09:27:33.41645 | OK171511218029 | Alice
2012-03-14 09:51:46.387244 | OK448670789462 | Bob
2012-03-14 09:52:36.738625 | OK5088512947 | Sergej
但是比较u.login > now()-interval '24小时'
也会返回在上一个01:00之前登录的用户,这很糟糕,尤其是在早上。
有没有一种有效的方法可以获取自上一个01:00以来的登录记录而不使用to_char()
进行字符串操作?
date_trunc('day', now())
可能会更耗费时间,你觉得呢? - Frank BollackWHERE
子句中应该只被查询一次,对吗? - Frank Bollack