1、数据库中的数据如图片中所示。
2、数据库是SQLCE,不能使用SQL语句求平均值,不支持avg和groupby。
3、现在要根据时间计算平均值,作为结果集。 也就是有时根据“2014-04-04”逐日计算, 有时根据“2014-04-04 18”逐分计算,有时根据“2014-04-04 18:22” 逐分钟计算。
问题:
1、C#代码如何实现这样的功能呢???
2、 SQLCE数据库不支持,能不能在“DataTable/DataSet”下实现这样的平均? 还是要转化List数据集合才可以。
3、最好给点代码实例,谢谢。
15 个解决方案
#1
db数值列,datetime 是时间列。
#2
你可以用select xxx from t_datalist where 时间判断
然后在c#里存在datatable里面然后
int allDB=0;
for(int i=0;i<datatable.length;i++)
{
allDB+=int32.parse( datable.rows[i]["db"].toString());
}
平均值就是allDB/datatable.length;
然后在c#里存在datatable里面然后
int allDB=0;
for(int i=0;i<datatable.length;i++)
{
allDB+=int32.parse( datable.rows[i]["db"].toString());
}
平均值就是allDB/datatable.length;
#3
不是一个平均值,是根据时间的一组平均值。
#4
System.Data.DataTable table = new DataTable();
//平均
test = table.Compute("avg(db)", "datetime='2014-01-30'");
#5
谢谢。。。
如果时间(datetime)有:
“2014-01-25”、“2014-01-26”、“2014-01-27”、“2014-01-28”、“2014-01-29”、“2014-01-30”多个时间,每天的平均值有没有方法一次性计算出啊。
#6
SQL语句可以直接搞定啊
Select avg(db),(datename(yyyy,datetime)+'-'+datename(mm,datetime)+'-'+datename(dd,datetime)) as datetime From tb Group by (datename(yyyy,datetime)+'-'+datename(mm,datetime)+'-'+datename(dd,datetime))
#7
都说了不能写 SQL 语句,楼上的大神都不看题的
#8
System.Data.DataTable table = new DataTable();
//平均
test = table.Compute("avg(db)", "datetime='2014-01-30'");
谢谢。。。
如果时间(datetime)有:
“2014-01-25”、“2014-01-26”、“2014-01-27”、“2014-01-28”、“2014-01-29”、“2014-01-30”多个时间,每天的平均值有没有方法一次性计算出啊。
SQL语句可以直接搞定啊
Select avg(db),(datename(yyyy,datetime)+'-'+datename(mm,datetime)+'-'+datename(dd,datetime)) as datetime From tb Group by (datename(yyyy,datetime)+'-'+datename(mm,datetime)+'-'+datename(dd,datetime))
大神,数据库是SQLCE,不能使用SQL语句求平均值,不支持avg和groupby。
#9
SQL好像不行了,只能在代码里面实现了
#10
借个楼,,,我编了个程序,让串口每毫秒发送一段字符串给另一个串口,统计发送次数和接收次数,结果发现发送次数大于接收次数,但是接收到的字符串个数就是发送次数,所以我自己想的是1毫秒时间比较短,串口发送缓存可能来不及把原来的数据发送出去就又有新的数据进来了,然后两次的一块法。如果我猜的对的话,我想知道怎么控制串口缓冲区收到数据立刻发送,不出现两次一块发送的的情况。求大神
#11
有人知道么???
#12
写个循环不得了么?
DateTime dtStart=起始时间
DateTime dtEnd=结束时间
While(dtStart<=dtEnd)
{
//平均
test = table.Compute("avg(db)", "datetime=dtStart");
dtStart.=dtStart.AddDays(1);
}
DateTime dtStart=起始时间
DateTime dtEnd=结束时间
While(dtStart<=dtEnd)
{
//平均
test = table.Compute("avg(db)", "datetime=dtStart");
dtStart.=dtStart.AddDays(1);
}
#13
借个楼,,,我编了个程序,让串口每毫秒发送一段字符串给另一个串口,统计发送次数和接收次数,结果发现发送次数大于接收次数,但是接收到的字符串个数就是发送次数,所以我自己想的是1毫秒时间比较短,串口发送缓存可能来不及把原来的数据发送出去就又有新的数据进来了,然后两次的一块法。如果我猜的对的话,我想知道怎么控制串口缓冲区收到数据立刻发送,不出现两次一块发送的的情况。求大神
不是发送的慢,是你接收的慢了.
不要用timer来判断
写个while(true)的线程实时去判断
#14
可以写循环多次查询取平均值,也可以先整个都查询出来,要在SQL里直接写排序,然后程序去判断哪些是同一组的,再分别计算平均值
#15
table.select(t条件SQL)
#1
db数值列,datetime 是时间列。
#2
你可以用select xxx from t_datalist where 时间判断
然后在c#里存在datatable里面然后
int allDB=0;
for(int i=0;i<datatable.length;i++)
{
allDB+=int32.parse( datable.rows[i]["db"].toString());
}
平均值就是allDB/datatable.length;
然后在c#里存在datatable里面然后
int allDB=0;
for(int i=0;i<datatable.length;i++)
{
allDB+=int32.parse( datable.rows[i]["db"].toString());
}
平均值就是allDB/datatable.length;
#3
你可以用select xxx from t_datalist where 时间判断
然后在c#里存在datatable里面然后
int allDB=0;
for(int i=0;i<datatable.length;i++)
{
allDB+=int32.parse( datable.rows[i]["db"].toString());
}
平均值就是allDB/datatable.length;
不是一个平均值,是根据时间的一组平均值。
#4
System.Data.DataTable table = new DataTable();
//平均
test = table.Compute("avg(db)", "datetime='2014-01-30'");
#5
System.Data.DataTable table = new DataTable();
//平均
test = table.Compute("avg(db)", "datetime='2014-01-30'");
谢谢。。。
如果时间(datetime)有:
“2014-01-25”、“2014-01-26”、“2014-01-27”、“2014-01-28”、“2014-01-29”、“2014-01-30”多个时间,每天的平均值有没有方法一次性计算出啊。
#6
System.Data.DataTable table = new DataTable();
//平均
test = table.Compute("avg(db)", "datetime='2014-01-30'");
谢谢。。。
如果时间(datetime)有:
“2014-01-25”、“2014-01-26”、“2014-01-27”、“2014-01-28”、“2014-01-29”、“2014-01-30”多个时间,每天的平均值有没有方法一次性计算出啊。
SQL语句可以直接搞定啊
Select avg(db),(datename(yyyy,datetime)+'-'+datename(mm,datetime)+'-'+datename(dd,datetime)) as datetime From tb Group by (datename(yyyy,datetime)+'-'+datename(mm,datetime)+'-'+datename(dd,datetime))
#7
都说了不能写 SQL 语句,楼上的大神都不看题的
#8
System.Data.DataTable table = new DataTable();
//平均
test = table.Compute("avg(db)", "datetime='2014-01-30'");
谢谢。。。
如果时间(datetime)有:
“2014-01-25”、“2014-01-26”、“2014-01-27”、“2014-01-28”、“2014-01-29”、“2014-01-30”多个时间,每天的平均值有没有方法一次性计算出啊。
SQL语句可以直接搞定啊
Select avg(db),(datename(yyyy,datetime)+'-'+datename(mm,datetime)+'-'+datename(dd,datetime)) as datetime From tb Group by (datename(yyyy,datetime)+'-'+datename(mm,datetime)+'-'+datename(dd,datetime))
大神,数据库是SQLCE,不能使用SQL语句求平均值,不支持avg和groupby。
#9
SQL好像不行了,只能在代码里面实现了
#10
借个楼,,,我编了个程序,让串口每毫秒发送一段字符串给另一个串口,统计发送次数和接收次数,结果发现发送次数大于接收次数,但是接收到的字符串个数就是发送次数,所以我自己想的是1毫秒时间比较短,串口发送缓存可能来不及把原来的数据发送出去就又有新的数据进来了,然后两次的一块法。如果我猜的对的话,我想知道怎么控制串口缓冲区收到数据立刻发送,不出现两次一块发送的的情况。求大神
#11
有人知道么???
#12
写个循环不得了么?
DateTime dtStart=起始时间
DateTime dtEnd=结束时间
While(dtStart<=dtEnd)
{
//平均
test = table.Compute("avg(db)", "datetime=dtStart");
dtStart.=dtStart.AddDays(1);
}
DateTime dtStart=起始时间
DateTime dtEnd=结束时间
While(dtStart<=dtEnd)
{
//平均
test = table.Compute("avg(db)", "datetime=dtStart");
dtStart.=dtStart.AddDays(1);
}
#13
借个楼,,,我编了个程序,让串口每毫秒发送一段字符串给另一个串口,统计发送次数和接收次数,结果发现发送次数大于接收次数,但是接收到的字符串个数就是发送次数,所以我自己想的是1毫秒时间比较短,串口发送缓存可能来不及把原来的数据发送出去就又有新的数据进来了,然后两次的一块法。如果我猜的对的话,我想知道怎么控制串口缓冲区收到数据立刻发送,不出现两次一块发送的的情况。求大神
不是发送的慢,是你接收的慢了.
不要用timer来判断
写个while(true)的线程实时去判断
#14
可以写循环多次查询取平均值,也可以先整个都查询出来,要在SQL里直接写排序,然后程序去判断哪些是同一组的,再分别计算平均值
#15
table.select(t条件SQL)