我的第一個問題在這裏..!SQL在給定時間段內只能獲得數小時的值?
我不是SQL專家,請耐心等待我! :)
我有一個網頁(不是我自己創建的)從MSSQL數據庫獲取報表數據,在您輸入的網頁上開始日期和結束日期和數據在00:00開始日期直到結束日期23:59。
我已經設法添加更多的查詢到SQL,但現在我想,爲某些值只返回值在每天的時間範圍00:00:00至04:00:00記錄選定的時間間隔。
當前值每小時記錄一次,但並不總是一致。到目前爲止,我已經在我的網頁中做了一個解決方法,它顯示了前4個值並跳過了下20個,這個循環在選定的時間間隔內循環。此方法的工作時間爲98%,但偶爾每天會有多於或少於24個記錄值,這可能會導致顯示的值將以某種方式偏斜。
我想要做的是更改我的SQL查詢,以便它只返回所選時間段內每天所需時間範圍內(在午夜和04:00之間)的值。我希望有人能幫助我實現這一點,或給我一些提示! :)
這是現有的SQL查詢運行的變量,我確實希望所有的值。還有更多的變量,但我編輯了它們,所有的Ren * Time變量都是我想要製作一個4小時 - 每日版本的變量。
SET NOCOUNT ON;
IF OBJECT_ID('tempdb..#tmpValues') IS NOT NULL BEGIN DROP TABLE #tmpValues END;
CREATE TABLE #tmpValues(Id INT PRIMARY KEY IDENTITY(1,1),BatchId INT, TimePoint DATETIME, Ren1Time DECIMAL(10,2), Ren2Time DECIMAL(10,2), Ren3Time DECIMAL(10,2), RenTotTime DECIMAL(10,2));
INSERT INTO #tmpValues(BatchId)
SELECT BatchId
FROM Batch
WHERE Batch.LogTime BETWEEN <StartTime> AND <StopTime>;
CREATE UNIQUE INDEX I_BatcId ON #tmpValues(BatchId);
UPDATE #tmpValues SET
TimePoint = (SELECT LogTime FROM Batch WHERE Batch.BatchId = #tmpValues.BatchId),
Ren1Time = (SELECT SUM(_Float) FROM LogData WHERE LogData.BatchId = #tmpValues.BatchId AND LogData.TagId = 21),
Ren2Time = (SELECT SUM(_Float) FROM LogData WHERE LogData.BatchId = #tmpValues.BatchId AND LogData.TagId = 25),
Ren3Time = (SELECT SUM(_Float) FROM LogData WHERE LogData.BatchId = #tmpValues.BatchId AND LogData.TagId = 29),
RenTotTime = (SELECT SUM(_Float) FROM LogData WHERE LogData.BatchId = #tmpValues.BatchId AND (LogData.TagId = 25 OR LogData.TagId = 29 OR LogData.TagId = 33));
DECLARE
@TimePoint DATETIME,
@Ren1Time FLOAT,
@Ren2Time FLOAT,
@Ren3Time FLOAT,
@RenTotTime FLOAT;
INSERT INTO #tmpValues(TimePoint, Ren1Time, Ren2Time, Ren3Time, RenTotTime)
VALUES(@TimePoint, @Ren1Time, @Ren2Time,@Ren3Time, @RenTotTime);
SET NOCOUNT OFF;
SELECT * FROM #tmpValues;
IF OBJECT_ID('tempdb..#tmpValues') IS NOT NULL BEGIN DROP TABLE #tmpValues END;
標記所使用的dbms。 (該代碼不符合ANSI SQL標準。) – jarlh
使用'OBJECT_ID'表示MS SQL Server –