私はSQLの初心者です。正確な質問をする前にシナリオを簡潔に説明し、適切な文脈を描いてみたい。T-SQLを使用して大量のデータをフィルタリングし、結果のグループを処理する方法は?
私は電子トークンが作成、更新、または閉鎖されるたびにレコードを含む大きなテーブルを持っています。テーブルの主キーは "HistoryID"であり、各トークンにはその日の開始時にリサイクルされるTokenNoがあります(つまり、トークン番号が15の単一のトークン、例えば15は同じ中に開けたり、閉じたり、再び開くことができません日)。
以下は、表のスナップショットです。表示されているように、Token No 940が作成され(ステータスID = 1)、さまざまなステータス(2,3,4)に更新されてから閉じられます(10)。後日、940のレコードが続きます。
╔═════════════════╦══════════╦═══════════╦═════════════════════════╗
║ History ID (PK) ║ Token ID ║ Status ID ║ Status Updated On ║
╠═════════════════╬══════════╬═══════════╬═════════════════════════╣
║ 13435 ║ 953 ║ 1 ║ 2013-01-24 16:20:26.957 ║
║ 13436 ║ 940 ║ 1 ║ 2013-01-24 16:20:22.090 ║
║ 13437 ║ 939 ║ 3 ║ 2013-01-24 16:20:30.290 ║
║ 13438 ║ 939 ║ 5 ║ 2013-01-24 16:21:07.387 ║
║ 13439 ║ 940 ║ 2 ║ 2013-01-24 16:21:09.000 ║
║ 13440 ║ 940 ║ 3 ║ 2013-01-24 16:23:14.510 ║
║ 13441 ║ 940 ║ 4 ║ 2013-01-24 16:23:15.860 ║
║ 13442 ║ 940 ║ 10 ║ 2013-01-24 16:23:30.013 ║
║ 13443 ║ 938 ║ 2 ║ 2013-01-24 16:23:31.657 ║
╚═════════════════╩══════════╩═══════════╩═════════════════════════╝
関連付けられているトークンでレコードをグループ化する必要があります。私が見ていることは、まずレコードを1日ごとにフィルタリングする必要があることを意味し、トークン番号で結果をフィルタリングし、各トークン番号と1日あたりのレコードのグループを与えます。ある状態から別の状態に変更するのにかかる時間を平均化する、トークンが開いている期間をグラフ化するなど、必要な計算を実行できます。
私はこれをどうやって行うのかわかりません。どんな助けでも大歓迎です。経験豊富なSQL開発者にとって、このような問題はかなり簡単だと思いますか?事前に
感謝:)
あなただけの 'SELECT COUNT(HistoryID)が必要です.. 。履歴からGROUP BY TokenID、CAST(StatusUpdatedOn DATE) '...?私はあなたが少なくともあなたの望む結果を加えなければならないと思います。 –
私は、初心者から中級者向けのSQLチュートリアルとして、www.sqlzoo.netをお勧めします。運が良かった。 – JeffUK
LEAD()分析関数は、状態変化の時間差を計算するのに便利です。これは、あなたがavgに必要な時間を与え、オープン時間などを決定します。日付のMin()/ max()は、各トークンのオープン時間とクローズ時間を与えます(より早いと仮定し、分析関数とケースステートメントを使用してそれを把握することができますが、実際には具体的な質問はありません。期待される結果をいくつか提供してください。 – xQbert