这背后的逻辑是,如果相同位置的Ser_request号码是相同的,那么,考虑使用Max的行“停机前的电源”。需要更新的行是具有最小值的列名ID。
我需要创建三个新列Adj开始日期,Adj结束日期,Adj DC电源,并插入从回复列中的数据。
我试过这样做,但是通过分组相同的值,我找不到第一行。
我正在使用sql server 2012。
这就是我迄今尝试过的:
select location,downtime_start , count(*)
from dbo.TB1
group by location,downtime_start , count(*)
having count(*)>1在这个查询之后,我得到了TB1的结果,我不知道如何将它们分组并将值插入到相应的列中。
任何帮助都是非常感谢的。
谢谢
ID | location | downtime_start | downtime_end | power_before_downtime | power_after_downtime | creation_time | end_time | ser_request
1 | xyz.a | 3/8/2017 2:00:00 PM | 3/10/2017 8:00:00 AM | 14.16 | 13.67 | 3/8/2017 3:25:37 PM | 3/8/2017 6:41:59 PM | 0003
2 | xyz.a | 3/8/2017 2:00:00 PM | 3/10/2017 8:00:00 AM | 14.16 | 13.67 | 3/8/2017 3:25:37 PM | 3/8/2017 6:41:59 PM | 0003
3 | xyz.a | 3/8/2017 2:00:00 PM | 3/10/2017 8:00:00 AM | 14.16 | 13.67 | 3/8/2017 3:25:37 PM | 3/8/2017 6:41:59 PM | 0003 输出表应该类似于:
ID | location | downtime_start | downtime_end | power_before_downtime| power_after_downtime| creation_time | end_time
|ser_request | Adj Start date | Adj end date | Adj DC power
1 | xyz.a | 3/8/2017 2:00:00 PM | 3/10/2017 8:00:00 AM | 14.16 | 13.67 |3/8/2017 3:25:37 PM | 3/8/2017 6:41:59 PM| 0003 | 3/8/2017 2:00:00 PM | 3/10/2017 8:00:00 AM | 14.16
2 | xyz.a | 3/8/2017 2:00:00 PM | 3/10/2017 8:00:00 AM | 14.16 3:25:37下午3/8/2017 6:41:59
0\x{e76f}\x{e76f}0
3 | xyz.a | 3/8/2017 2:00:00 PM| 3/10/2017 8:00:00 AM | 14.16 + 13.67 3/8/2017 3:25:37下午3/8/2017
发布于 2017-04-26 09:36:13
UPDATE T
SET
[Adj Start date] = downtime_start,
[Adj end date] = downtime_end,
[Adj DC power] = power_before_downtime
FROM (
SELECT [Adj Start date], [Adj end date], [Adj DC power], downtime_start, downtime_end, power_before_downtime,
rn = ROW_NUMBER() OVER (PARTITION BY downtime_start, downtime_end ORDER BY id)
FROM dbo.TB1
) T
WHERE rn = 1如果需要选择数据,请使用CASE WHEN rn = 1 THEN downtime_start ELSE 0 END
https://stackoverflow.com/questions/43629306
复制相似问题