某些选定记录SQL的平均值
我有下表:某些选定记录SQL的平均值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有下表: ID myDate myTime Value 1 2014-06-01 00:00:00 100 2 2014-06-01 01:00:00 125 3 2014-06-01 02:00:00 132 4 2014-06-01 03:00:00 139 5 2014-06-01 04:00:00 145 6 2014-06-01 05:00:00 1
ID myDate myTime Value
1 2014-06-01 00:00:00 100
2 2014-06-01 01:00:00 125
3 2014-06-01 02:00:00 132
4 2014-06-01 03:00:00 139
5 2014-06-01 04:00:00 145
6 2014-06-01 05:00:00 148
FF.
24 2014-06-01 23:00:00 205
25 2014-06-02 00:00:00 209
26 2014-06-02 01:00:00 215
27 2014-06-02 02:00:00 223
FF.
48 2014-06-02 23:00:00 280
49 2014-06-03 00:00:00 290
50 2014-06-03 01:00:00 302
FF.
71 2014-06-03 22:00:00 389
72 2014-06-03 23:00:00 400
73 2014-06-04 00:00:00 405
FF.
我想计算从01:00:00到次日00:00:00的所有记录的平均值。例如:
我想知道“2014-06-01”的平均值。然后平均值为2014-06-01 01:00:00到2014-06-02 00:00:00之间的值
如何使用SQL select语句执行此操作
谢谢。我一开始是从日期中减去一个小时来确定日期与天数的对应关系。加上日期和时间,然后减去一小时 然后是一个简单的小组。这将在MS SQL Server上工作
WITH CorrectedDates AS (
SELECT
DateAdd(hh,-1,DateAdd(hh,DatePart(hh,myTime),myDate)) AS newDate, Value
FROM table1
)
SELECT CAST(newDate AS DATE) AS MainDate, AVG(Value)
FROM CorrectedDates cd
GROUP BY CAST(newDate AS DATE)
要仅获取一个日期,只需在FROM和GROUP BY子句之间添加以下内容:
WHERE NewDate = '2014-6-1'
我有我自己的答案:检查一下
谢谢。这听起来像是一个简单的分组-你试过了吗?@Skram,按哪个栏目分组?这就是为什么很难做到的。因为你想跨越这两天,你不能做一个简单的分组。嗨,我试过你的语法。但结果似乎不正确。与小提琴一样,“2014-06-01”从01:00:00开始的平均值是200300300300300。结果应该是280,再检查一遍。我将数据设置为在0100时增加100,也就是说,从那天的24小时开始到第二天的0000。如果我做的不正确,请调整小提琴,使每天都可以被100整除,然后发布链接。嗨,KingOfAllTrades,我尝试了你的语法,并给了我一个错误。错误为.Net SqlClient数据提供程序,错误消息:无法在日期调用方法。那么?如果使用fiddle,您可以从“运行SQl”按钮旁边的下拉列表中选择“markdown output”,然后将结果复制并粘贴到您的答案中,以在此处获得格式良好的答案。我的查询可以在具有相同结果的数据集上工作@金融通,你能用条件语句修改吗?比如说,我只想看看“2014-06-01”的平均值。我将投票并标出你的答案。
if (OBJECT_ID('[TempDB]..[#DataTable]') is not null)
drop table #DataTable
create table #DataTable (
[Date] date,
[Time] time,
Value int
)
declare @inputDate date
set @inputDate = '2014-6-1'
insert into #DataTable values
(cast('2014-6-1' as date), '0:0', 100),
(cast('2014-6-1' as date), '1:0', 200),
(cast('2014-6-1' as date), '2:0', 300),
(cast('2014-6-1' as date), '3:0', 400),
(cast('2014-6-1' as date), '4:0', 500),
(cast('2014-6-1' as date), '5:0', 600),
(cast('2014-6-1' as date), '6:0', 700),
(cast('2014-6-1' as date), '7:0', 800),
(cast('2014-6-1' as date), '8:0', 900),
(cast('2014-6-1' as date), '9:0', 1000),
(cast('2014-6-1' as date), '10:0', 1100),
(cast('2014-6-1' as date), '11:0', 1200),
(cast('2014-6-1' as date), '12:0', 1300),
(cast('2014-6-1' as date), '13:0', 1400),
(cast('2014-6-1' as date), '14:0', 1500),
(cast('2014-6-1' as date), '15:0', 1600),
(cast('2014-6-1' as date), '16:0', 1700),
(cast('2014-6-1' as date), '17:0', 1800),
(cast('2014-6-1' as date), '18:0', 1900),
(cast('2014-6-1' as date), '19:0', 2000),
(cast('2014-6-1' as date), '20:0', 2100),
(cast('2014-6-1' as date), '21:0', 2200),
(cast('2014-6-1' as date), '22:0', 2300),
(cast('2014-6-1' as date), '23:0', 2400),
(cast('2014-6-2' as date), '0:0', 2500),
(cast('2014-6-2' as date), '1:0', 2600),
(cast('2014-6-2' as date), '2:0', 2700),
(cast('2014-6-2' as date), '3:0', 2800),
(cast('2014-6-2' as date), '4:0', 2900),
(cast('2014-6-2' as date), '5:0', 3000),
(cast('2014-6-2' as date), '6:0', 3100),
(cast('2014-6-2' as date), '7:0', 3200),
(cast('2014-6-2' as date), '8:0', 3300),
(cast('2014-6-2' as date), '9:0', 3400),
(cast('2014-6-2' as date), '10:0', 3500),
(cast('2014-6-2' as date), '11:0', 3600),
(cast('2014-6-2' as date), '12:0', 3700),
(cast('2014-6-2' as date), '13:0', 3800),
(cast('2014-6-2' as date), '14:0', 3900),
(cast('2014-6-2' as date), '15:0', 4000),
(cast('2014-6-2' as date), '16:0', 4100),
(cast('2014-6-2' as date), '17:0', 4200),
(cast('2014-6-2' as date), '18:0', 4300),
(cast('2014-6-2' as date), '19:0', 4400),
(cast('2014-6-2' as date), '20:0', 4500),
(cast('2014-6-2' as date), '21:0', 4600),
(cast('2014-6-2' as date), '22:0', 4700),
(cast('2014-6-2' as date), '23:0', 4800)
select @inputDate Tanggal, avg(d.Value) [Rata-rata]
from #DataTable d
where
(d.[Date] = @inputDate and d.[Time] <> '0:0')
or (d.[Date] = DATEADD(day, 1, @inputDate) and d.[Time] = '0:0')