1

テーブル内の大量のデータをチェックして、フィードがスキップされていないことを確認する必要があります。

基本的に、テーブルには次の列があります

ID日時料金

DateTime 列のデータは、連続する行ごとに 1 分ずつ増加します。現在の行の次の行をチェックして、その特定のコンテキストでのクエリよりも 1 分上であるかどうかを確認する必要があります。

クエリにはおそらくある種のループが必要です。次に、次の行のコピーを取得し、それを現在の日時行と比較して、1 分ずつインクリメントされていることを確認します。

4

2 に答える 2

3

あなたの説明に一致するようにテストテーブルを作成し、次のように各行の間に1分で100行を挿入しました。

CREATE TABLE [Test] ([Id] int IDENTITY(1,1), [Date] datetime, [Price] int);

WITH [Tally] AS (
  SELECT GETDATE() AS [Date]
  UNION ALL
  SELECT DATEADD(minute, -1, [Date]) FROM [Tally] WHERE [Date] > DATEADD(minute, -99, GETDATE())
)
INSERT INTO [Test] ([Date], [Price])
    SELECT [Date], 123 AS [Price]
    FROM [Tally]

次に、行方不明の分をシミュレートするために途中でレコードを削除しました。

DELETE FROM [Test]
WHERE Id = 50

これで、このクエリを使用して欠落しているレコードを見つけることができます。

SELECT 
    a.*
    ,CASE WHEN b.[Id] IS NULL THEN 'Next record is Missing!' ELSE CAST(b.[Id] as varchar) END AS NextId
FROM
    [Test] AS a
    LEFT JOIN [Test] AS b ON a.[Date] = DATEADD(minute,1,b.[Date])
WHERE
    b.[Id] IS NULL

結果は次のようになります。

Id          Date                    Price       NextId
----------- ----------------------- ----------- ------------------------------
49          2013-05-11 22:42:56.440 123         Next record is Missing!
100         2013-05-11 21:51:56.440 123         Next record is Missing!

(2 row(s) affected)

この問題の重要な解決策は、テーブルをそれ自体と結合することですが、datediff を使用して、次の分に見つかるはずのレコードを見つけます。もちろん、テーブルの最後のレコードは、まだ挿入されていないため、次の行がないことを報告します。

于 2013-05-11T21:37:39.730 に答える