在 Postgres 9.4 中,我有一个表格,其中包含不同发件人发送的用户电子邮件。我需要生成最近不同发件人的列表,我正在使用以下查询:
SELECT DISTINCT ON (tableA.senderName)
tableA.senderName,tableA.received,tableA.someOtherColumn
FROM tableA
WHERE tableA.received BETWEEN timeA AND timeB
ORDER BY tableA.senderName,tableA.received DESC
由于tableA
包含所有发件人的所有消息,因此此查询仅提供不同发件人的最新消息,并且效果很好。
实际上,我在一个视图中有整个查询(除了WHERE
子句,因为timeA
和timeB
每次都不同),然后我只是SELECT *
从这个视图中使用特定的timeA
和子句。timeB
WHERE
现在考虑以下查询:
SELECT SUM(ts_rank_cd(tableA.precompTSVector,constantTSQuery)) AS score
FROM tableA
WHERE tableA.precomTSVector @@ constantTSQuery
AND tableA.sender = someParticularSender
AND tableA.received BETWEEN timeA AND timeB
它给出了在给定时间范围内针对特定发件人的所有消息搜索某些恒定 TS 查询的总分。
我想将此查询(可能作为子查询)合并到我的视图中,以便我还可以看到每个不同发件人的“分数”。明显的问题是“分数查询”依赖于实际timeA
并且timeB
在 WHERE 子句中。在查询视图本身之前,这些时间是未知的。
编辑:一个不同的问题是someOtherColumn
在第一个查询中也被选中(可能还有其他一些我也想合并到视图中的列) - 因为正在使用聚合函数。
任何想法如何实现这一目标?或者也许欢迎一些不同的方法!