作成された時刻と変更された時刻を指定して、特定の日付のレコードを選択するSQL

コンテキスト

私は私の問題追跡データベースを "分析"するために私の経営陣から尋ねられました。彼らは内部のバグなどをカタログ化するためにそれを使用しています。私のSQLとDBのスキルは原始です。

データ

私は300万レコードの単一テーブルを受け取った。それは250Kのバグを説明します。バグの各リビジョンは表の行です。それは250Kのバグが300万レコードで終わるところです。

データ looks like this

BugID  Created      Modified     AssignedTo  Priority  Status
27     mar-31-2003  mar-31-2003  mel         2         Open
27     mar-31-2003  apr-01-2003  mel         1         Open
27     mar-31-2003  apr-10-2003  steve       1         Fixed

したがって、私はすべてのバグの完全な履歴を持っており、毎日どのように進化したかを見ることができます。

私が遂行したいもの

私はレポートとして提供するように求められてきたことがたくさんあります。しかし、私がしなければならない最も基本的な質問は、誰かが特定の日付に存在していたバグを見ることができるようにすることです。

たとえば、誰かが2003年3月1日にすべてのバグを尋ねた場合、バグ27はその日には存在しないため、結果には含まれません。または、彼らが4月7日にバグを尋ねた場合、バグ27が表示され、まだ開いているとマークされます

私の特別な質問

私が概説したスキーマを考えると、特定の日付のレコードのビューを提供するSQLクエリは何ですか?

技術的な詳細

私はMicrosoft SQL Server 2008を使用しています

そんなに私が試したこと

私が言ったように私のSQLスキルは原始的です。 WHERE句を使用して、ターゲット日付の後に行われた変更と、ターゲット日付までに存在しなかったバグをフィルタリングすることができましたが、その日付に発生した単一レコードを見つけることができませんでした。

0
誰がダウン投票した?理由についてのコメントを投稿して、OPがそれに対処できるように助けしてください。
追加された 著者 MatBailie,
Demsが指摘したように、私に教えてください - 私は質問を改善するために時間を費やすでしょう。
追加された 著者 namenlos,

1 答え

WITH
  sequenced_data AS
(
  SELECT
    ROW_NUMBER() OVER (PARTITION BY BugID ORDER BY Modified DESC) AS sequence_id,
    *
  FROM
    yourTable
  WHERE
    Modified <= @datetime_stamp
)
SELECT
  *
FROM
  sequenced_data
WHERE
  sequence_id = 1

これは、あなたが修正されたバグを見たいと仮定します。 '長い間前に'修正されたバグ(例えば、30日)を除外するには、これを追加してください...

AND (Status <> 'Fixed' OR Modified >= DATEADD(DAY, -30, @datetime_stamp))
4
追加された
これは完全に機能しました!
追加された 著者 namenlos,