【问题标题】:Returning the latest entries in PostgreSQL for multiple records返回 PostgreSQL 中多条记录的最新条目
【发布时间】:2017-12-13 04:18:56
【问题描述】:

我有一个网络应用程序,用户可以在其中向存储在数据库中的联系人发送消息。成功发布消息后,收件人的详细联系信息将输入到另一个表中。我想做一个查询,返回该邮件的收件人。这些是桌子上的列:

| communication_id | first_name | last_name | telephone |

communication_id 是一个外键,它对于每个不同的通信都是不同的,而不是每个人。例如,如果一个用户发送一条消息并且有 20 个收件人,我只想得到这 20 个。所有 20 个都具有相同的通信 ID

到目前为止我的查询是

SELECT communication_id, first_name ||' ' || last_name AS recipient_name, telephone
FROM communications_sent
ORDER BY communication_id DESC

但众所周知,这将返回所有内容。我也不能LIMIT,因为有些条目会被遗漏。我不能使用COUNT(*)>1,因为即使是较旧的通信也有大于 1 的计数。我怎样才能只获得最新的条目?可以是一个条目,也可以是 100 个。

我上面查询的一个示例输出是:

|communication_id|recipient_name|telephone|
|       263      |   John Doe   |712100100|
|       263      |   Willy Bill |721001001|
|       262      |   Mary May   |700101010|
|       262      |   Joe Jimmy  |722111000|

【问题讨论】:

    标签: sql postgresql postgresql-9.1


    【解决方案1】:

    如果我理解正确,您只需要一个通信 ID,但需要所有收件人。如果是这样:

    SELECT cs.communication_id, cs.first_name ||' ' || cs.last_name AS recipient_name, cs.telephone
    FROM communications_sent cs
    WHERE cs.communication_id = (SELECT MAX(cs2.communication_id)
                                 FROM communications_sent cs2
                                )
    ORDER BY cs.communication_id DESC
    

    【讨论】:

    • 非常感谢。有效。不过我有一个问题,为什么它必须嵌套?如果用作SELECT MAX(cs.communication_id), ...作为第一个参数,则输出错误
    • @Clint_A 。 . .因为你不能在WHERE 子句中使用聚合函数。
    猜你喜欢
    • 2022-01-11
    • 2020-08-22
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多