我有 2 張桌子
table a mempur
memberno = member number
purdt = purchase date
amount = purchase amount
table b meminfo
memberno = member number
fname = first name
age = age
select a.memberno,b.fname,sum(a.amount),a.purdt,b.age from mempur a,(select max(purdt) as maxdate,memberno from mempur group by memberno) maxresult,meminfo b
where a.memberno=b.memberno
and a.purdt between '01-JAN-22' and '28-FEB-22'
and a.memberno=maxresult.memberno
and a.purdt=maxresult.maxdate
group by a.memberno,b.fname,a.purdt,b.age
order by a.memberno;
如何從表 mempur 獲得總購買金額和最高購買日期的結果?我使用此查詢能夠顯示結果,但范圍之間的總量不正確。
非常感謝任何人的幫助。
我的樣本資料
MEMBERNO PURDT AMOUNT
--------------- --------------- ---------
BBMY0004580 12-AUG-21 823.65
BBMY0004580 12-AUG-21 1709.1
BBMY0004580 26-AUG-21 1015.1
BBMY0004580 28-AUG-21 1105.1
我的結果只顯示總額 1105.1
uj5u.com熱心網友回復:
您可以聚合mempur然后加入meminfo:
SELECT i.*, p.total_amount, p.maxdate
FROM meminfo i
INNER JOIN (
SELECT memberno, SUM(amount) total_amount, MAX(purdt) maxdate
FROM mempur
WHERE purdt BETWEEN '01-JAN-22' AND '28-FEB-22'
GROUP BY memberno
) p ON p.memberno = i.memberno;
LEFT如果結果中有您想要的沒有購買的成員,您可以使用加入。
uj5u.com熱心網友回復:
您的查詢獲取最大 purdt 并將此日期的金額相加。它還會檢查最大 purdt 是在 2022 年 1 月還是 2022 年 2 月。如果是,則顯示結果,如果不是,則不顯示結果。這不是您想要的查詢。
除此之外,查詢看起來相當難看。您正在使用一種難以閱讀且容易出錯的古老連接語法。我們在 1980 年代使用它,但在 1992 年,顯式連接將其納入 SQL 標準。您不應再使用這種舊的逗號語法。看到它仍然被使用很奇怪。去博物館的感覺。然后,您正在使用表別名。這些想法是讓查詢更具可讀性,但您的查詢甚至會降低可讀性,因為您的別名 a 和 b 是任意的。請改用助記名稱,例如 mp 表示 mempur,mi 表示 meminfo。然后,您將日期(我希望 purdt是一個日期!)與字串進行比較。不。請改用日期文字。
至于你的桌子:你真的在儲存年齡嗎?您必須每天更新它以保持最新狀態。更好地存盤出生日期并在查詢中計算年齡。
這是一個查詢,可為您獲取給定日期范圍的最大日期和總金額:
select memberno, m.name, p.sum_amount, p.max_purdt, m.age
from meminfo m
left outer join
(
select memberno, sum(amount) as sum_amount, max(purdt) as max_purdt
from mempur
where purdt >= date '2022-01-01' and purdt < date '2022-03-01'
group by memberno
) p using (memberno)
order by memberno;
這是一個查詢,它可以讓您獲得最大總日期以及給定日期范圍內的總金額:
select memberno, m.name, p.sum_amount, p.max_purdt, m.age
from meminfo m
left outer join
(
select
memberno,
sum(case when where purdt >= date '2022-01-01' and purdt < date '2022-03-01'
then amount
end) as sum_amount,
max(purdt) as max_purdt
from mempur
group by memberno
) p using (memberno)
order by memberno;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474657.html
