PostgreSQL:将来自变量字段的值“整理”为单个结果

时间:2014-09-24 20:48:34

标签: sql postgresql

我有一个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正在做什么那就没关系,但我真的很难弄清楚如何从这两组领域得到一个结果。

有关如何填写此报告的任何指导?

我也欢迎任何关于表模式本身的评论;我不确定有两套评审领域是最佳设计。

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