ここに私の最初の質問..!SQLは一定時間内にわずか数時間しか値を取得しませんか?
私はSQLのエキスパートではありません。 :)
MSSQLデータベースからレポートデータを取得するWebページ(私によって作成されていない)があります。開始日と終了日を入力するWebページで、この時間間隔は00:00から終了日の23:59までの開始日。
SQLにさらにクエリを追加することができましたが、今では、特定の値に対して、毎日00:00:00から04:00:00までの時間範囲に記録された値のみを返します。選択された時間間隔。
現在、値は1時間に1回記録されますが、必ずしも一貫して記録されるわけではありません。これまでのところ私は最初の4つの値を表示し、次の20をスキップして、選択した間隔でこのループを行うWebページで回避策を作成しました。この方法は98%の時間で動作しますが、時には1日あたり24個以上のログ値が存在することもあります。これは、表示された値が一方向に歪む原因となります。
私がしたいのは、選択した期間の毎日の(午前0時から午前4時までの)欲しい時間範囲の値のみを返すようにSQLクエリを変更することです。私は誰かがこれを達成するのを助けたり、私にいくつかのヒントを与えるのを願っています! :)
これは、すべての値が必要な変数で実行されている既存の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 –