2017-04-26 23 views
0

这背后的逻辑是如果Ser_request数字对于同一位置是相同的,那么请考虑具有最大“停机前功率”的行。需要被更新的行是列名ID与最小值如何更新其他列中相同的值?

我需要创建三个新列调开始日期,调结束日期,可调节直流电源,并从repective列插入数据

  • downtime_start =调开始时间

    -downtime_end =调结束日期

    -power_before_downtime =调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 

| 13.67 | 3/8/2017 3:25:37 PM | 3/8/2017 6:41:59 PM | 0003
| 0 | 0 | 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 PM | 3/8/2017 6:41:59 PM | 0003 | 0 | 0 | 0

+0

你使用MySQL或MS SQL Server? (不要标记不涉及的产品。) – jarlh

+1

我无法阅读那些图片的小文本。 (这里的大多数人想格式化文本,而不是图像...) – jarlh

+0

我正在使用MS SQL 2010 –

回答

1
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

+0

我收到一个错误,因为所有三列的inavlid列名 –

+0

@Looking_for_answers我编辑了我的查询并添加了五个缺失的列。如果出现错误,请提供完整的错误信息 –

相关问题