我不確定標題是否真的對應,也許我的方法是錯誤的。
我有以下資料庫結構:
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每個生產記錄與 date比大max_date了之后每個生產者我們得到了INNER JOIN上述查詢。該SUM()會在列執行value。
希望這很清楚,如果沒有,請告訴我。我試過在子句中做另一個INNER JOIN并使用 table但我得到一個錯誤,告訴我該表在那里,但不可能在查詢的那部分中使用。maxWHERE
也許另一個INNER JOIN不是解決方案。在這里,我受限于我對 SQL 的了解,我真的不知道要更深入地閱讀哪些關鍵字以了解什么是最佳方法以及如何去做。因此,將我重定向到最佳路徑的資訊將非常有幫助。
提前致謝。
編輯:忘記指定將在哪一列SUM()上執行。
編輯 2:剛剛意識到我在這里問的是,結果將始終是一個空表,因為永遠date不會有更大的記錄。當我撰寫資料庫的簡化版本時,忘記添加表/聯接,這就是原因。但最終 imo 的方法/解決方案仍然是相同的,只是應用于不同的表。再次為此感到抱歉。
uj5u.com熱心網友回復:
使用distinct onand可以大大簡化問題中的第一個查詢order by:
select distinct on (p.id)
p.id, d.date
from producers p
join data d on p.id = d.producer_id
order by p.id, d.date desc;
至于“將每個生產者的所有資料記錄與大于 max_date 的日期相加” - 好吧,不存在日期大于最新的資料記錄。這是一個查詢(即使結果將為空)
select producer_id, sum(value)
from data d inner join -- the query above follows
(
select distinct on (p.id)
p.id producer_id, d.date
from producers p
join data d on p.id = d.producer_id
order by p.id, d.date desc
) t using (producer_id)
where d.date > t.date
group by producer_id;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/403622.html
標籤:
上一篇:還從SQL查詢回傳空匹配項
下一篇:Emit沒有在VueJS中注冊?
