我有一个Web应用程序,允许两个用户查看条目,然后以先到先得的方式将它们记录到(PostgreSQL 9.1)数据库中的两组字段之一。相关表格看起来像这样(显然有点简化):
name_1 | timestamp_1 | name_2 | timestamp_2
-----------+------------------+--------+------------------
jane | 2014-09-01 15:30 | (null) | (null)
christine | 2014-09-01 12:00 | jane | 2014-09-01 15:20
mark | 2014-09-02 10:20 | (null) | (null)
mark | 2014-09-02 10:30 | jane | 2014-09-02 12:30
我的目标是为每个用户(name_*
字段中的用户)创建活动报告,其中列出了他们的姓名,第一次审核的时间戳,上次审核的时间戳以及该用户审核的条目总数。在表格格式中,这是我对上述数据的预期输出:
name | first | last | total
-----------+------------------+------------------+-------
christine | 2014-09-01 12:00 | 2014-09-01 12:00 | 1
jane | 2014-09-01 15:20 | 2014-09-02 12:30 | 3
mark | 2014-09-02 10:20 | 2014-09-02 10:30 | 2
我被卡住的原因是名称和相关的时间戳可能出现在两个字段之一(以及哪一个无法预测)。如果我只关心name_1
正在做什么那就没关系,但我真的很难弄清楚如何从这两组领域得到一个结果。
有关如何填写此报告的任何指导?
我也欢迎任何关于表模式本身的评论;我不确定有两套评审领域是最佳设计。
答案 0 :(得分:2)
select
name,
min(timestamp) as first,
max(timestamp) as last,
count(*) as total
from (
select name_1 as name, timestamp_1 as timestamp
from t
union all
select name_2, timestamp_2
from t
) s
group by name