簡體   English   中英

按時間段匯總SQL列值

[英]Aggregate SQL column values by time period

我每隔5分鍾就會收到一些數值數據(即每天288個值,並且還有相當幾天的數據價值)。 我需要編寫一個查詢,該查詢可以返回每天所有值的總和。 因此,當前表如下所示:

03/30/2010 00:01:00  --   553   
03/30/2010 00:06:00  --   558   
03/30/2010 00:11:00  --   565  
03/30/2010 00:16:00  --   565  
03/30/2010 00:21:00  --   558   
03/30/2010 00:26:00  --   566  
03/30/2010 00:31:00  --   553   
...

這持續了'x'天,我希望查詢返回'x'行數,其中每一行都包含每天的所有值的總和。 像這樣:

03/30/2010  --  <sum>
03/31/2010  --  <sum>
04/01/2010  --  <sum>

該查詢將在Dundas Webpart內進行,因此,不幸的是,我無法編寫自定義用戶函數來提供幫助。 所有邏輯都需要在一個大查詢中。 任何幫助,將不勝感激,謝謝。 我目前正在嘗試使其使用GROUP BY和DATEPART進行工作,不確定是否是正確的方法。

這是一個不錯的把戲。 如果將SQL DATETIME轉換為FLOAT ,則日期為days.fractionofday。

因此,如果您設置了該范圍,然后將其重新設置為DATETIME ,則可以在給定的日期使用Minight。

CAST(FLOOR(CAST(MyDateTime  AS FLOAT)) AS DATETIME)

因此,我最喜歡的方法是。

select
    CAST(FLOOR(CAST(OrderDate AS FLOAT)) AS DATETIME)
    , sum(taxamt) as Amount
from
    Sales.SalesOrderHeader
group by
        CAST(FLOOR(CAST(OrderDate AS FLOAT)) AS DATETIME)

我不知道這是否比以前的正確答案更有效/更有效。

您可以使用CAST來輸入日期

SELECT [ENTRY_DATE],CAST([ENTRY_DATE] AS date) AS 'date' 
FROM [PROFIT_LIST]

現在您可以根據此分組。

SELECT CAST([ENTRY_DATE] AS date) AS 'date',SUM(PROFIT) 
FROM [PROFIT_LIST]
GROUP BY CAST([ENTRY_DATE] AS date) AS 'date'

我看不到如何使用DATEPART ,因為它不能僅返回DATETIME值的日期部分(如果我輸入錯了,請更正我)。 起作用的是使用DATEADD將時間“空”並按YYYY-MM-DD 00:00:00.000格式的值分組。

下面的查詢針對Adventure Works數據庫有效(如果已在SQL Server 2005上進行了測試)。 除了使用DATEADD它與@OMG Ponies的建議非常相似:

select
    dateadd(dd, 0, datediff(dd, 0, OrderDate)) as SaleDay
    , sum(taxamt) as Amount
from
    Sales.SalesOrderHeader
group by
    dateadd(dd, 0, datediff(dd, 0, OrderDate))
order by
    SaleDay

dateadd(dd, 0, datediff(dd, 0, OrderDate))的想法是首先獲取“從時間開始到您的日期為止經過的天數”( datediff -part),然后添加此天數到“時間的開始”。 這給了您“一天的開始”。 我希望這是可以理解的:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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