[英]SQL - Get an average price of the last 7 days
我有一個看起來像這樣的表:
timestamp | commodity | amount | price |
我試圖獲取商品的加權平均值,從最近7天開始(為了創建圖形,C#程序),我設法創建了一個查詢以獲取加權平均值:
SELECT SUM(price * amount),
SUM(amount)
FROM [table_name]
WHERE (commodity = @commodity)
AND (timestamp >= @fromDate
AND timestamp <= @toDate);
因此,我發送了7次此查詢,每次將(-1)添加到fromDate和toDate中,以獲取最近7天的平均值。
我想問一下是否有一種方法可以在1個查詢中執行此操作,是否可以實現上個月的相同信息。
您可以使用轉換為日期並執行以下代碼:
SELECT convert(date, timestamp) as [Dates],
SUM(price * amount),
SUM(amount)
FROM [table_name]
WHERE (commodity = @commodity)
AND (timestamp >= @fromDate
AND timestamp <= @toDate)
GROUP BY convert(date, timestamp)
你必須按日期分組
SELECT SUM(price* amount),SUM(amount) FROM [table_name] WHERE (commodity = @commodity) AND (cast(timestamp as date)>= @fromDate AND cast(timestamp as date)<= @toDate)
Group By cast(timestamp as date)
您應該按日期對數據進行分組:
SELECT SUM(price * amount),SUM(amount)
FROM [table_name]
WHERE (commodity = @commodity)
AND (timestamp >= @fromDate
AND timestamp <= @toDate)
GROUP BY CAST(timestamp as DATE);
要生成日期,可以使用以下方法:
;with Datescte as (
Select top (datediff(day, @fromDate, @toDate) +1) Dt = Dateadd(day, Row_Number() over (order by (Select null))-1, @fromDate)
from master..spt_values s1, master..spt_values s2
), cte2 as (
SELECT convert(date, timestamp) as [Dates],
SUM(price * amount) as [Sum_Price_Amount],
SUM(amount) as [Sum_Amount]
FROM [table_name]
WHERE (commodity = @commodity)
AND (timestamp >= @fromDate
AND timestamp <= @toDate)
GROUP BY convert(date, timestamp)
)
Select Dt as [Dates] , Sum_Price_Amount, Sum_Amount
FROM Datescte d
LEFT JOIN cte2 d2
ON d.Dt = d2.Dates
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.