簡體   English   中英

SQL-獲取最近7天的平均價格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM