我有一個時間序列 plc 標記資料,如下所示,其值為“1”或“0”
| id | tagname | value | datetime |
|----|-----------------------------|-------|-------------------------|
| 28 | RH.ONCHANGE.PROCESS_CYCLE_4 | 1 | 28-09-2021 17:43:38.767 |
| 29 | RH.ONCHANGE.CYCLE_COMPLETE | 0 | 28-09-2021 17:44:39.637 |
| 30 | RH.ONCHANGE.PROCESS_CYCLE_4 | 0 | 28-09-2021 17:44:01.723 |
| 31 | RH.ONCHANGE.PROCESS_CYCLE_5 | 1 | 28-09-2021 17:44:02.070 |
| 32 | RH.ONCHANGE.CYCLE_COMPLETE | 1 | 28-09-2021 17:44:07.637 |
| 33 | RH.ONCHANGE.PROCESS_CYCLE_5 | 0 | 28-09-2021 17:44:09.637 |
| 34 | RH.ONCHANGE.CYCLE_COMPLETE | 0 | 28-09-2021 17:44:35.513 |
| 35 | RH.ONCHANGE.ALL_GUN_HOME | 1 | 28-09-2021 17:44:38.890 |
| 36 | RH.ONCHANGE.PROCESS_CYCLE_1 | 1 | 28-09-2021 17:44:38.917 |
| 37 | RH.ONCHANGE.ALL_GUN_HOME | 1 | 28-09-2021 17:44:39.110 |
| 38 | RH.ONCHANGE.ALL_GUN_HOME | 0 | 28-09-2021 17:46:00.087 |
| 39 | RH.ONCHANGE.PROCESS_CYCLE_1 | 0 | 28-09-2021 17:46:01.710 |
使用下面的代碼我可以得到輸出
select tOn.tagname, tOn.datetime StartTime, tOff.datetime EndTime
from (
select tagname, datetime,
ROW_NUMBER() Over(Partition by tagname order by datetime desc) EventID
from [a2_al].[dbo].[rbc] where value = 1
) tOn
LEFT JOIN (
select tagname, datetime,
ROW_NUMBER() Over(Partition by tagname order by datetime desc) EventID
from [a2_al].[dbo].[rbc] where value = 0
) tOff
on (tOn.tagname = tOff.tagname and tOn.EventID = tOff.EventID)
輸出
| id | tagname | StartTime | EndTime |
|----|-----------------------------|-------------------------|-------------------------|
| 28 | RH.ONCHANGE.PROCESS_CYCLE_4 | 28-09-2021 17:43:38.767 | 28-09-2021 17:44:01.723 |
| 31 | RH.ONCHANGE.CYCLE_COMPLETE | 28-09-2021 17:44:39.637 | 28-09-2021 17:44:07.637 |
| 30 | RH.ONCHANGE.PROCESS_CYCLE_5 | 28-09-2021 17:44:02.070 | 28-09-2021 17:44:09.637 |
| 33 | RH.ONCHANGE.CYCLE_COMPLETE | 28-09-2021 17:44:35.513 | |
| 35 | RH.ONCHANGE.ALL_GUN_HOME | 28-09-2021 17:44:38.890 | 28-09-2021 17:44:39.10 |
| 34 | RH.ONCHANGE.PROCESS_CYCLE_1 | 28-09-2021 17:44:38.917 | 28-09-2021 17:46:01.710 |
| 36 | RH.ONCHANGE.ALL_GUN_HOME | 28-09-2021 17:46:00.087 | |
但我的要求是,我只想查詢回溯 25 小時,所以我添加了一個謂詞:
where datetime >= DATEADD(Hour, -25, GETDATE())
但這會回傳錯誤:
訊息 209 級別 16 狀態 1
不明確的列名稱“日期時間”。
uj5u.com熱心網友回復:
您有兩個子查詢,它們都包含名為 的列datetime。當你說:
where datetime >= DATEADD(Hour, -25, GETDATE())
您需要告訴 SQL Server您指的是哪一個。所以要么:
where tOn.datetime >= DATEADD(Hour, -25, GETDATE())
... 或者 ...
where tOff.datetime >= DATEADD(Hour, -25, GETDATE())
我猜應該是tOn。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/416741.html
標籤:
上一篇:算術溢位取決于按列分組
