2016-05-17 80 views
0

我有一個表的數據,如下面的SQL Server:三角洲隨着時間的推移 - SQL服務器

+-------+------------+-------------------------+--------------------------+ 
| ID |  IP |    Date  |     NumFails | 
+-------+------------+-------------------------+--------------------------+ 
| 21365 | 172.16.2.1 | 2016-05-16 00:20:54.000 |      200 | 
| 21457 | 172.16.3.1 | 2016-05-16 00:21:05.000 |      295 | 
| 21478 | 172.16.4.1 | 2016-05-16 00:22:46.000 |      128 | 
| 24255 | 172.16.2.1 | 2016-05-16 12:22:01.000 |      213 | 
| 24318 | 172.16.3.1 | 2016-05-16 12:22:12.000 |      297 | 
| 24366 | 172.16.4.1 | 2016-05-16 12:23:52.000 |      243 | 
| 25699 | 172.16.2.1 | 2016-05-16 18:21:31.000 |      226 | 
| 25794 | 172.16.3.1 | 2016-05-16 18:21:41.000 |      347 | 
| 25811 | 172.16.4.1 | 2016-05-16 18:22:51.000 |      270 | 
| 27142 | 172.16.2.1 | 2016-05-17 00:22:45.000 |      227 | 
| 27193 | 172.16.3.1 | 2016-05-17 00:22:55.000 |      347 | 
| 27251 | 172.16.4.1 | 2016-05-17 00:23:59.000 |      270 | 
+-------+------------+-------------------------+--------------------------+ 

我對如何做到這一點編程的想法,但是我太新到SQL知道如何做到這一點:我想得到特定時間段的NumFails的增量。爲此,我希望能夠執行以下查詢:

從時間段A選擇IP地址(< 2016-05-17 01:00:00.000和> 2016-05-17 00:00:00.000)並與時間段B(< 2016-05-16 01:00:00.000和> 2016-05-16 00:00:00.000)中的IP地址相匹配並返回IP地址,並返回期間A的差值numfails result MINUS period b numfails result 。這是在時間段A(所有都是唯一的)與時間段B比較每個唯一的IP地址。

任何簡單的方法來做這樣的事情?我想每天運行報告,因此期間A將轉移到今天的日期,而期間B將是前一天的日期。我可以預先填充調用SQL,但我不知道要構建什麼來獲取這兩個值並執行差異和報告。

+1

您可以發佈以上示例數據所需的輸出。有關獲取幫助的更多信息,請在此處快速獲得幫助或甚至上傳:https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question- on-a-public-forum/ – TheGameiswar

+0

查看http://stackoverflow.com/questions/634568/how-to-get-difference-between-two-rows-for-a-column-field –

+0

請閱讀[** How (http://stackoverflow.com/help/how-to-ask) \t \t這裏是[** START **]的好地方(http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum /)來了解如何提高問題質量並獲得更好的答案。 –

回答

0

該解決方案假設每個IP都將存在於兩個時間範圍內。

declare @StartPeriodA datetime 
declare @EndPeriodA datetime 
declare @StartPeriodB datetime 
declare @EndPeriodB datetime 

set @StartPeriodA = '2016-05-17 00:00:00.000' 
set @EndPeriodA = '2016-05-17 01:00:00.000' 
set @StartPeriodB = '2016-05-16 00:00:00.000' 
set @EndPeriodB = '2016-05-16 01:00:00.000' 

select a.IP, a.PeriodAFailures - b.PeriodBFailures as 'FailureDifference' 
from 
(
    select IP, sum(NumFails) as PeriodAFailures 
    from YourTable 
    where Date between @StartPeriodA and @EndPeriodA 
    group by IP 
) a 
inner join 
(
    select IP, sum(NumFails) as PeriodBFailures 
    from YourTable 
    where Date between @StartPeriodB and @EndPeriodB 
    group by IP 
) b on a.IP = b.IP 

您可以根據需要操縱的日期。

+0

太棒了,非常感謝。現在我對SQL實際上可以如何用來獲取和操作這些值有了更好的理解。 –

相關問題