根据过去一个小时内另一个标志的值设置一个标志

时间:2018-06-25 16:48:20

标签: sql sql-server

我的桌子设计如下:

+------+-------------------------+-------------+
| Shop | Date                    | SafetyEvent |
+------+-------------------------+-------------+
| 1    | 2018-06-25 10:00:00.000 |      0      |
| 1    | 2018-06-25 10:30:00.000 |      1      |
| 1    | 2018-06-25 10:45:00.000 |      0      |
| 2    | 2018-06-25 11:00:00.000 |      0      |
| 2    | 2018-06-25 11:30:00.000 |      0      |
| 2    | 2018-06-25 11:45:00.000 |      0      |
| 3    | 2018-06-25 12:00:00.000 |      1      |
| 3    | 2018-06-25 12:30:00.000 |      0      |
| 3    | 2018-06-25 12:45:00.000 |      0      |
+------+-------------------------+-------------+

基本上,每个商店都会跟踪维修的日期/时间,并在发生安全事件时进行标记。我想添加一个附加列,以跟踪每个商店最近8个小时是否发生了安全事件。最终结果将是这样:

+------+-------------------------+-------------+-------------------+
| Shop | Date                    | SafetyEvent | SafetyEvent8Hours |
+------+-------------------------+-------------+-------------------+
| 1    | 2018-06-25 10:00:00.000 |      0      |        0          |
| 1    | 2018-06-25 10:30:00.000 |      1      |        1          |
| 1    | 2018-06-25 10:45:00.000 |      0      |        1          |
| 2    | 2018-06-25 11:00:00.000 |      0      |        0          |
| 2    | 2018-06-25 11:30:00.000 |      0      |        0          |
| 2    | 2018-06-25 11:45:00.000 |      0      |        0          |
| 3    | 2018-06-25 12:00:00.000 |      1      |        1          |
| 3    | 2018-06-25 12:30:00.000 |      0      |        1          |
| 3    | 2018-06-25 12:45:00.000 |      0      |        1          |
+------+-------------------------+-------------+-------------------+

我试图使用DATEDIFF,但无法弄清楚每行如何发生它。

1 个答案:

答案 0 :(得分:2)

这并不是特别有效,但是您可以使用df <- data.frame(ID = c(1,1,1,1,1,1,1,1), value1 = c(0, 0, 4, 1, 0, 0, 0, 12), value2 = c(0, 12, 0, 0, 8, 1, 8, 12), value1aux = c(0, 0, 89, 65, 0, 0, 0, 1), value2aux = c (1,1,0,0,4,15,67,12)) 或相关子查询:

names <- colnames(df[2:3])
names2 <- colnames(df[4:5])
for (i in 1:nrow(df)){
df[i,names] <- replace (df[i,names], df[i,names2] == 0, 0)}

如果您可以依靠每15分钟记录一次的事件,那么更有效的方法是使用窗口函数:

apply