高手进!请教一个程序的好思路!

b249833177 2013-06-18 04:29:22
数据库表
name time state
test1 2013-06-18 16:12:22 true
test1 2013-06-18 16:22:53 true
test1 2013-06-18 16:32:13 true
test1 2013-06-18 16:42:53 false
test1 2013-06-18 16:52:11 true
test1 2013-06-18 17:02:11 true
test1 2013-06-18 17:12:11 false
test2 2013-06-18 16:12:22 true
test2 2013-06-18 16:22:53 true
test2 2013-06-18 16:32:13 true
test2 2013-06-18 16:42:53 false
test2 2013-06-18 16:52:11 true
test2 2013-06-18 17:02:11 true
test2 2013-06-18 17:12:11 false

需求:将test1,test2 state为true的记录汇总时间差和state为true的时间段汇总,格式如下。
最后用程序要处理统计后,输出到如下表格:

名称 时长(h:mm) 时间段
test1 0:50 2013-06-18 16:12:22->2013-06-18 16:32:13,2013-06-18 16:52:11->2013-06-18 17:02:11
test2 0:50 2013-06-18 16:12:22->2013-06-18 16:32:13,2013-06-18 16:52:11->2013-06-18 17:02:11

程序已经完成了,总感觉很麻烦,希望大家能分享一下更好的思路。
...全文
95 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
TableName 换成表名 state=1为 ture
select a.name as 名称,DATEDIFF(MI,min(a.time),max(a.time)) as 时长,(SELECT     CONVERT(varchar(100),b.time, 20)  + '-》'
                                                         FROM          TableName b 
                                                         WHERE      a.name = b.name FOR XML PATH('')) AS 时间段 from TableName a
                                                         group by a.name,a.state having a.state=1
Johnyin 2013-06-18
  • 打赏
  • 举报
回复
1. 根据name 和time排序筛选 state=true的记录 2. 将1的结果,分成奇数列和偶数列(可根据行号选择) 3. 根据2的结果相减汇总. 顺便考虑下 单个 name记录不是成对出现的情况...

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧