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