簡體   English   中英

SQL 歷史查詢未返回所有結果

[英]SQL Historian Query not returning all results

我正在使用歷史學家來搜索特定標簽的某些值。 歷史學家有一定的規則,例如,我不能創建或刪除表,查詢需要標記名等。

例如,我想搜索 TagName 'Tank1' 並返回其 DateTime 和 Value 結果,然后使用這些結果進一步搜索標簽以匹配在該 DateTime 具有相同值的那些標簽。

我在給定日期和時間之間搜索“Tank1”並收到 4 個結果,如下所示

2021-11-02 08:00:54.9870000 1
2021-11-02 10:22:27.9850000 1
2021-11-02 11:47:31.3360000 2
2021-11-02 23:11:57.8120000 2

因此,我需要搜索其他四個標簽並返回與 dateTime 和 value 匹配的結果。

下面的代碼是我制作的(我現在應該告訴你我是一個虛擬新手)

DECLARE @AT1Value INT,
        @AT1DateTime DateTime
SELECT  @AT1Value = Value,                              --GETS THE VALUES OF AT1 STERILISER
        @AT1DateTime = DateTime                         --GETS THE DATETIME OF AT1 STERILISER VALUES
From Runtime.dbo.v_History
Where 
    Runtime.dbo.v_History.Tagname = 'AT1_Select_ster'
AND Runtime.dbo.v_History.DateTime >= '2021-11-02 08:00'
AND Runtime.dbo.v_History.DateTime <= '2021-11-03 08:01'
AND Runtime.dbo.v_History.Value > 0


Select  a.DateTime,
        a.TagName,
        a.Value
From Runtime.dbo.v_History AS a        --GETS  THE VALUES OF THE FM TAGS AT THE DATETIME OF AT1 STERILISER VALUES
Where  
    ((a.TagName = 'FM_S1_Batch' AND a.Value = @AT1Value AND a.DateTime = @AT1DateTime)
OR  (a.Tagname = 'FM_S2_batch' AND a.Value = @AT1Value AND a.DateTime = @AT1DateTime)
OR  (a.Tagname = 'FM_S3_batch' AND a.Value = @AT1Value AND a.DateTime = @AT1DateTime)
OR  (a.Tagname = 'FM_S4_batch' AND a.Value = @AT1Value AND a.DateTime = @AT1DateTime))
AND a.Value > 0

這很好用,盡管它只產生下面的最后一個 dateTime 和 Value 結果,

2021-11-02 23:11:57.8120000 FM_S2_batch 2

我是否正確地假設這是因為變量每次都被覆蓋並且只保存最后一個值?

應該返回的結果應該類似於下面的結果

2021-11-02 08:00:54.9870000 FM_S1_batch 1
2021-11-02 10:22:27.9850000 FM_S1_batch 1
2021-11-02 11:47:31.3360000 FM_S2_batch 2
2021-11-02 23:11:57.8120000 FM_S2_batch 2

無論如何我可以進行多次掃描並保存每個結果,直到獲得所需的所有結果? 還是有更簡單更合適的方法(我猜有)。

TIA

如果我理解正確,您希望您的intdatetime變量(@AT1DateTime 和@AT1Value)將包含第一個查詢返回的多個值。 那是行不通的(正如您所指出的,它們將只保留一個值)。

從提供的代碼來看,您根本不清楚是否需要將這些值存儲在變量中。 我想你可能正在尋找類似的東西:

Select  a.DateTime,
        a.TagName,
        a.Value
From Runtime.dbo.v_History AS a        
Where  
a.TagName IN ('FM_S1_Batch', 'FM_S2_batch', 'FM_S3_batch', 'FM_S4_batch')
AND EXISTS
 (SELECT  *
 From Runtime.dbo.v_History b
 Where 
  b.Tagname = 'AT1_Select_ster'
  AND b.DateTime >= '2021-11-02 08:00'
  AND b.DateTime <= '2021-11-03 08:01'
  AND b.Value > 0
  AND b.Value = a.Value
  AND b.DateTime = a.DateTime
 )
AND a.Value > 0

這是您的兩個查詢合並為一個。 外部查詢的第二個/中間WHERE條件檢查 a.value/a.datetime 組合是否存在於內部查詢中。

感謝所有花時間回復我的問題的人。 感謝@EdmCoff 建議嘗試使用for-loop 或cursor,我終於使用cursor 讓它工作了。

for 循環返回最后一個值 4 次,所以我嘗試了 cursor,它對我有用。

我在下面發布了適合我的代碼

DECLARE @AT1Value INT,
        @AT1DateTime DateTime
        
DECLARE cursor_result CURSOR                                

FOR SELECT  Runtime.dbo.v_History.Value,                    
        Runtime.dbo.v_History.DateTime                      
From Runtime.dbo.v_History
Where 
    Runtime.dbo.v_History.Tagname = 'AT1_Select_ster'
AND Runtime.dbo.v_History.DateTime >= '2021-11-02 08:00'
AND Runtime.dbo.v_History.DateTime <= '2021-11-04 08:01'
AND Runtime.dbo.v_History.Value > 0

OPEN cursor_result                                          
FETCH NEXT FROM cursor_result INTO                          
    @AT1Value,
    @AT1DateTime

WHILE @@FETCH_STATUS = 0                                    
Select  a.DateTime,
        a.TagName,
        a.Value
From Runtime.dbo.v_History AS a                             
Where  
    ((a.TagName = 'FM_S1_Batch' AND a.Value = @AT1Value AND a.DateTime = @AT1DateTime)
OR  (a.Tagname = 'FM_S2_batch' AND a.Value = @AT1Value AND a.DateTime = @AT1DateTime)
OR  (a.Tagname = 'FM_S3_batch' AND a.Value = @AT1Value AND a.DateTime = @AT1DateTime)
OR  (a.Tagname = 'FM_S4_batch' AND a.Value = @AT1Value AND a.DateTime = @AT1DateTime))
AND a.Value > 0
FETCH NEXT FROM cursor_result INTO                                      
@AT1Value,
@AT1DateTime
END
CLOSE cursor_result                                         
DEALLOCATE cursor_result                                    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM