我有一个 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
做了什么,那很好,但我真的很难弄清楚如何从两组字段中获得一个结果。
关于如何完成此报告的任何指导?
我也欢迎对表架构本身提出任何意见;我不确定拥有两组评论字段是否是最佳设计。
最佳答案
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
关于sql - PostgreSQL:变量字段中的 'Collating' 值变为单个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26026194/