图片-一天当中不同时间段的累加

问题描述

一天当中不同时间段的累加


有样一张表。
其中字段status有六种状态SYSOPEN、SYSCOLOE、WAIT 、WORK 、STOP、 ALAM
其中SYSCLOSE对应的时间减去SYSOPEN对应的时间的值为开机时间.SYSOPEN和SYSCLOSE 在一天中出现的次数不定。同日期的不同时段的SYSCLOSE和SYSOPEN相减的值之和,为一天内的开机总时间。

查询天数为任意日期范围(如2015.10.1---2015.10.31),求的查询日期范围内每天的开机总时间
求高手指点!!!

解决方案

http://download.csdn.net/download/kunkun1014/6856309

解决方案二:

楼上说的有道理,不过case不能覆盖完全,且不易规避,有一种情况会有问题,如求2015-10-02到2015-10-05期间的开机时间,2015-10-01开机,2015-10-02第一条数据是关机数据,同理2015-10-05最后是开机状态。这两种case没有涉及。
完全用sql实现我不太清楚。逻辑可以结合sql和代码实现:

1.使用sql:SELECT curTime, status FROM table WHERE status in ('SYSOPEN','SYSCOLOE') AND curTime BETWEEN '2015-10-01' AND '2015-10-05' ORDER BY curTime ASC; //其中 '2015-10-01'和'2015-10-05'是传入的期间参数
取出要求期间内的所有开机和关机时间升序排列。

2.代码中循环结果集,简单写:例如Entity为对应实体类
注:下面我把curTime当作已经转换为long,如何转换根据所用语言语法去做即可。

    使用sql获取结果集result。
    long sum = 0;
        int index = 0;
    if( 取result的第一条数据判断不是开机数据)
    {
            //case1,起始日期时已经是开机状态
        sum = curTime减去0点的差;
                index = 1;
    }

        long start = 0;

        for(index <result.count)
        {
            Entity entity = result[index];

                if(entity.status == SYSOPEN){
                    start = entity.curTime;
                }else{
                    sum += entity.curTime - start;
                        start = 0;
                }
        }

        if(start != 0){
            // case2终止日期最后未关机。
            sum += 24点 - start;
        }

sum即为总开机时间,转换成需要的格式即可。

解决方案三:

为什么没人什么回答啊,着急!!!,是我说的不够清楚吗?

解决方案四:

这个你可以分开几步写,然后综合到一起:
先查询指定的日志范围;然后查同一个日期内的开机和关机时间;开机和关机是一对的,也就是说你开了机下一次就只能关机了,所以就没有必要判断下一次
是不是关机,如果现在是开机那下一次就肯定是关机;所以你判断当前状态如果为开机然后查一下关机在什么时候直接相减就可以了;然后用聚合函数sum一下,

解决方案五:

不管你使用那种语言,系统的时间约定一天的值等于1。
你可通过打开该表数据,指定日期范围并设置排序为时间的反序,(时间晚的前),这样通过累加,close-open值,就是该日期内的累计值。

解决方案六:

你可以将一天内所有关机时间总和求出来然后减去开机时间的总和;我没有测,你可以测测的

解决方案七:

这个是最简单的;因为要求答十个字以上,所以填上点废话

解决方案八:

SELECT SUM(tb.close_time-tb1.begin_time) AS open_time FROM (SELECT SUM(UNIX_TIMESTAMP(curtime)) AS close_time,DATE(curtime) AS day_date FROM table WHERE curtime BETWEEN '2015-10-01' AND '2015-10-02' AND status='SYSCLOSE' GROUP BY DATE(curtime)) tb LEFT JOIN (SELECT SUM(UNIX_TIMESTAMP(curtime)) AS begin_time,DATE(curtime) AS day_date FROM table WHERE curtime BETWEEN '2015-10-01' AND '2015-10-02' AND status='SYSOPEN' group by DATE(curtime)) tb1 ON tb.day_date = tb1.day_date;

这个是mysql 的写法,一天的关机时间和减去一天的开机时间和 等于一天总的开机时间

解决方案九:

sql语句查询是可以查询时间段。直接从昨天的0:0:0到23:59:59就是一天的时间段。

解决方案十:

首先,我觉得方法不对,如果一个开机时间是23点,关机时间却是第二天的1点,那么按照上面所述的方法,计算出一天的开机时间是错误的。
如果能保证,没有跨越零点的开关机,则上面的算法就没问题了。

我认为,应该对该表做一定的修改,增加列,或者增加关联表。记录每条记录的开机时间。这样如果获取某一天的开机时间的,只需要获取改列的sum就可以了。
如果有跨越0点的开关机操作,则应对当天首先出现system close的记录和当天最后出现为system open的记录做特殊处理。

时间: 2024-09-17 04:52:30

图片-一天当中不同时间段的累加的相关文章

MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片

        最近有同学问我如何实现MFC基于对话框在图片控件中加载图片?其实使用MFC显示图片的方法各种各样,但是还是有些同学不知道怎样显示.以前在<数字图像处理>课程中完成的软件都是基于单文档的程序,这里介绍两种在对话框picthre控件中显示BMP图片的最简单基础的方法.       ~~方法可能并不完美,高手忽略,但是提供一种能运行的方法,希望对刚接触这方面知识的同学有所帮助.可能你觉得文章过于简单或者有些过于详细叙述(点到即可我并不反对),但也为哪些入门同学想想,当初自己也是一头雾

消除图片在ie中缓存而无法更新的问题

缓存|问题 程序中图片是动态显示的 原先把打算把图片保存在服务器端然后显示 可是由于ie的缓存问题导致图片无法实时更新显示 所以改为把图片存在session中然后再显示 需要保存的时候再保存到本地 //--------------chart.ashx.cs------------------- using System;using System.Web.SessionState;using System.IO;using System.Web; namespace WebApplication3

PHP 提取图片img标记中的任意属性

 这篇文章主要介绍了PHP 提取图片img标记中的任意属性的简单实例,有需要的朋友可以参考一下  代码如下: <?php   /* PHP正则提取图片img标记中的任意属性 */   $str = '<center><img src="https://img.lookmw.cn/images/20100516000.jpg" height="120" width="120"><br />PHP正则提取或更

.NET 导出图片到Excel中,打开不显示(或提示受保护)问题。

问题描述 .NET 导出图片到Excel中,打开不显示(或提示受保护)问题. public static MemoryStream TablesToExcelForXLSX(DataTable dt, DataTable reportTable, string file, int timeCount, string exportAll, string exportDatasource, string exportChart, out byte[] buf) { //HSSFWorkbook //

iphone-添加图片到UITabBarController中

问题描述 添加图片到UITabBarController中 我要在UITabBarController中添加一个图片,是整张图片添加到标签栏 tab bar,不是添加到哪个标签项tab item中,不知道能不能实现?有高人帮忙指点一下,多谢. 解决方案 如果用iOS 5+版本,可以用setBackgroundImage: UITabBar *yourtabBar = [yourtabController tabBar]; [yourtabBar setBackgroundImage:[UIIma

定时任务-sqlserver数据库,按照指定日期将表中对应时间段内的记录备份出去。

问题描述 sqlserver数据库,按照指定日期将表中对应时间段内的记录备份出去. 业务需求: 数据库自2009年起有5年的数据量. 数据库只保存近两年的数据.比如 2012-01-01 ~ 2014-01-01 首先将 2010-01-01 ~ 2012-01-01 的数据保存到大文件夹里[比如 D:2010年及2011年数据],以月份命名各个文件夹[每个文件夹里有当月的所有表,表中有当月的记录] 后将 2010-01-01 ~ 2012-01-01 的数据从数据库中删除 然后每一个月的最后一

imageview-如何让图片在ImageView中全屏显示?

问题描述 如何让图片在ImageView中全屏显示? 在ScrollView中嵌套Linearlayout,在linearlayout布局中有很多的ImageView控件,然后在代码中添加帧动画,imageview指定大小时(比如layout_width="50dp"),图片可以正常显示,但是做屏幕适配的时,将imageview的layout_width和layout_height设置为match_parent后,所有的图片都是缩小显示,这是为什么?如何做才可以将图片全屏显示? 解决方

java web-用java将图片存入SQLsever中

问题描述 用java将图片存入SQLsever中 [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]数据类型 image 和 nvarchar 在 equal to 运算符中不兼容. public void Insert() { try { String sql=""insert into picture values(??)""; PreparedStatement ps=conn.prepareState

解决FastStone截图软件发送图片到word中图片变小

说实话截图软件FastStone使用起来真的很不错呢,一直在使用.到目前为止差不多也有两年多的时间了,FastStone不停的更新,功能也在不停的增加.特别是截图后可以直接发送到word中,这点是我的最爱. 这不最近的纠结也是因为这个功能,在FastStone中明明截图比较大,但是发送到Word中图片就变小了,标的模糊了. 来个比较实际的例子: 这个是在FastStone中已经编辑好的图片. 这个是发送到Word中的图片. 通过上述两幅图片,可以很明显的看到在FastStone中图片是清晰的,而