首页 > 解决方案 > 为具有公共字段的记录分组第一个开始日期和最后一个结束日期

问题描述

这是我的表格数据的摘录:

  |deviceid |    |failcount|        started         |           ended    |
  | a1078   |    |  2      |  2020-12-07 14:51:33   | 2020-12-07 17:30:16|
  |a1006    |    |  2      |  2020-12-09 15:58:01   | 2020-12-09 23:59:59|
  |a1006    |    |  2      |  2020-12-10 00:00:00   | 2020-12-10 16:40:02|
  |a136     |    |  71     |  2020-12-18 10:12:19   | 2020-12-18 23:59:59|
  |a136     |    |  71     |  2020-12-19 00:00:00   | 2020-12-19 04:27:23|
  |a1078    |    |  36     |  2020-12-21 10:07:09   | 2020-12-21 14:36:40|

我想要得到的是获取每个 deviceid 的最早开始日期和最晚结束日期,但仅针对相同的失败计数。failcount 数是每个 deviceid 的失败数,因此多个 deviceid 可以具有相同的 failcount 数(应该很少)。

这就是我想要达到的目的:

|deviceid|   |failcount|    |      started        |  |      ended        |
|a1078   |   |    2    |    | 2020-12-07 14:51:33 |  |2020-12-07 17:30:16|
|a1006   |   |    2    |    |2020-12-09 15:58:01  |  |2020-12-10 16:40:02|
|a136    |   |    71   |    |2020-12-18 10:12:19  |  |2020-12-19 04:27:23|
|a1078   |   |    36   |    | 2020-12-21 10:07:09 |  |2020-12-21 14:36:40|

我已经尝试过最小/最大的变化,但无法弄清楚如何防止来自同一设备 ID 的不同失败计数被组合 - 例如,在上面的设备 ID a1078 中,我不希望失败计数 2 的开始和结束对于失败计数 36。

到目前为止,我所拥有的是这个,但它为同一个 deviceid 组合了不同的失败计数:

select deviceid
     , min(started) as started
     , max(started) as ended
from dayfail
where eventno = '600509'
and Convert(char(6),started, 112) = '202012'
group by deviceid

提前感谢这个 sql 新手的任何帮助;)

标签: sql-server

解决方案


推荐阅读