sql - PostgreSQL:变量字段中的 'Collating' 值变为单个结果

标签 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 做了什么,那很好,但我真的很难弄清楚如何从两组字段中获得一个结果。

关于如何完成此报告的任何指导?

我也欢迎对表架构本身提出任何意见;我不确定拥有两组评论字段是否是最佳设计。

最佳答案

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/

相关文章:

php - 将数据库行与提交的表单数据进行比较的最佳方法

postgresql - 从另一个表复制权限

闲置一段时间后出现 node.js ECONNRESET 错误

java - 位置 : 138 处或附近的语法错误 "00"

javascript - AngularJS $http.post(...).success 不是具有文件上传方法的函数

java - SQL服务器异常: when using jdbc connection to retrieve data

PHP/MySQL - 匹配 2 个表

sql - SQL Server/Azure 中空值 "not working"的总和

postgresql - postgres中用逗号分割字符串

sql - 如何优化这个 "Time apart"SQL 查询?