【发布时间】:2022-01-04 13:20:43
【问题描述】:
我不确定标题是否真的对应,也许我的方法是错误的。
我有以下数据库结构:
TABLE producers
id
TABLE data
id
date
value
producer_id OneToMany
首先,对于每个生产者,我想获得最新的date 注册data。下面的代码正是这样做的:
SELECT producers.id AS producer_id, max.date AS max_date
FROM producers
INNER JOIN data ON producers.id = data.producer_id
INNER JOIN (
SELECT producer_id, MAX(date) AS date
FROM data
GROUP BY producer_id
) AS max USING (producer_id, date)
结果表是:
----------------------------------------------------
| producer_id | max_date |
----------------------------------------------------
| 5 | 2022-01-01 01:45:00.000 +0000 |
| 7 | 2022-01-01 01:45:00.000 +0000 |
| 14 | 2022-01-01 01:45:00.000 +0000 |
| 15 | 2022-01-01 01:45:00.000 +0000 |
| 17 | 2022-01-01 01:45:00.000 +0000 |
----------------------------------------------------
接下来我需要的是SUM 每个生产者的所有data 记录WITH date 大于我们在INNER JOIN 之后为每个生产者获得的max_date 来自上一个查询。 SUM() 将在列 value 上执行。
希望这很清楚,如果没有,请告诉我。我已经尝试做另一个INNER JOIN 并在WHERE 子句中使用表max,但我收到一个错误,告诉我该表在那里,但不可能在查询的那部分中使用.
也许另一个INNER JOIN 不是解决方案。在这里,我受限于我对 SQL 的了解,我真的不知道要更深入地阅读哪些关键字以了解什么是最好的方法以及如何去做。因此,将我重定向到最佳路径的信息将非常有帮助。
提前致谢。
编辑:忘记指定SUM() 将在哪个列上执行。
编辑 2:刚刚意识到我在这里要问的是,结果将始终是一个空表,因为永远不会有 date 更大的记录。当我编写数据库的简化版本时,忘记添加表/连接,这就是原因。但最后 imo 方法/解决方案仍然是相同的,只是应用于不同的表。再次抱歉。
【问题讨论】:
-
你要去哪个栏目
sum()? -
@etch_45 哦抱歉忘了提,
value -
好点,但在我的真实场景中,除了这个我还做了其他
INNER JOINs,所以这就是我不能这样做的原因。但我会记住的,谢谢。 -
请:如果您有答案,请尽可能发表最好的问题。不要取消您的问题,也不要在其中编辑答案。但不要以使发布的答案无效的方式进行编辑。 How to Ask How to Answer Help center Meta Stack Overflow Meta Stack Exchange 对于代码问题,请给minimal reproducible example。请不要包括问候、道歉等。请不要插入“编辑”等词或以其他方式说您已编辑,只需编辑到最佳演示文稿即可。
标签: sql postgresql join