首页 > 解决方案 > 在时态表和 AVERAGE 中成功查询后返回非重复值

问题描述

我正在使用 SQL Server,并且我有一个成功的查询,它在我非常大的时间数据集中计算“MinutesOut”。由于记录的数量,我想开始消除无用的行并总结到当天。

查询成功:

select 
    t.*,
    case 
       when CustomersOut > 0
          then datediff(minute, RecordedDateTime, 
                        lead(RecordedDateTime) over (partition by UtilityName, StateName, CountyName, CityName 
                                                     order by RecordedDateTime)) 
    end MinutesOut
from
    MyTable1 t
  1. 我想消除 'MinutesOut' 为 NULL 的所有行

  2. 每当重复不同的记录“UtilityName”、“StateName”、“CityName”、“FullFIPSid”、“RecordedDateTime”时,所有记录都可以删​​除。

  3. 最后,是否可以将 DATETIME 列汇总到一天而不是每天 1000 倍?那就是计算每个不同的“UtilityName”+“StateName”+“CityName”+“FullFIPSid”+“RecordedDateTime”的平均“MinutesOut”

标签: sqlsql-server

解决方案


如果您的表有一个要加入的 ID,您可以执行以下操作来删除 NULL MinutesOut

SELECT 
  t0.*,
  MinutesOut
FROM
MyTable1 t0 INNER JOIN ( SELECT CASE  WHEN CustomersOut > 0
      THEN datediff(minute, RecordedDateTime, lead(RecordedDateTime) over (partition 
by UtilityName, StateName,  CountyName, CityName 
  order by RecordedDateTime)) 
END MinutesOut from MyTable1) t1 ON t0.ID = t1.ID WHERE MinutesOut IS NOT NULL 

推荐阅读