2016-08-30 5 views
0

私は建物にスキャンを格納するデータテーブルを持っていますが、これには100万を超えるデータが含まれています。このクエリー内に一時的なステータスカラムを追加しようとしていますが、は毎日のスキャンをカウントします。この私は今日のためにのみスキャンを表示するためにそれを絞られているからクエリを日付、ユーザーごとに1日あたりのカウンターを追加します

CREATE TABLE DataTable (DataTableID INT IDENTITY(1,1) NOT NULL, 
User VARCHAR(50), 
EventTime DATETIME) 

:この質問の目的のためにメインデータテーブルとしてこれを使用することができます

SELECT * FROM DataTable 
WHERE CONVERT(DATE,EventTime) = CONVERT(DATE, SYSDATETIME()) 

それは、この時点でです上記のこのクエリにステータス列を追加したいと思います。 [ステータス]列:

  • ODDは - 人建物の

    ではないことを意味します - EVENがWHEN人に建物
  • であることを意味します

    (これは単純に1から始まり、その日のスキャンごとに1ずつ増加するPER USER)です。 どうすればこのことをやりますか?これは、これが妨げるように私はメインテーブルにステータス列を追加傾けることを言及するその価値もクエリ構文

  • に影響を与えた場合に言及するので、その価値の後

  • 私は、このビューにしたいんドアアクセスプログラムが動作していなければ、それを制御するためにここに何かを追加します。

データ例:

DataTableID   User   EventTime    Status 
    1    Joe    30/08/2016 09:00:00  1 
    2    Alan   30/08/2016 08:45:00  1 
    3    John   30/08/2016 09:02:00  1 
    4    Steven   30/08/2016 07:30:00  1 
    5    Joe    30/08/2016 11:00:00  2 
    6    Mike   30/08/2016 17:30:00  1 
    7    Joe    30/08/2016 12:00:00  3 
+0

のDataTable CONVERT(DATE、イベント時刻)= CONVERT(DATE、SYSDATETIME(からのステータス 『「として<あなたが好き> SELECT』の例ではない言葉 – TheGameiswar

+0

ものについてで説明し、テキストとしていくつかのサンプルデータと予想される結果を表示してください)) " –

+1

*このステータス列には何がありますか? – Blorgbeard

答えて

1

あなたは、このためのシンプルなウィンドウ関数をしたいです。下記の質問をご覧になり、質問があれば教えてください。これは、WindowingのDataTableIDではなくEventTimeによって順序付けされ、最終クエリのDataTableIDによって順序付けられます。これは、データがテーブルの正しい順序でない場合に問題がないことを確認するためです。

テストのための温度テーブル。

サンプルデータを入力してください。

INSERT INTO #DataTable 
VALUES 
('Joe', '2016-08-30 09:00:00') 
,('Alan', '2016-08-30 08:45:00') 
,('John', '2016-08-30 09:02:00') 
,('Steven', '2016-08-30 07:30:00') 
,('Joe', '2016-08-30 11:00:00') 
,('Mike', '2016-08-30 17:30:00') 
,('Joe', '2016-08-30 12:00:00') 

クエリ

SELECT 
DataTableID 
,[User] 
,EventTime 
,ROW_NUMBER() OVER(PARTITION BY [User] ORDER BY EventTime) Status 
FROM #DataTable 
WHERE CONVERT(DATE,EventTime) = CONVERT(DATE, SYSDATETIME()) 
ORDER BY DataTableID 

出力

DataTableID User EventTime    Status 
1   Joe  2016-08-30 09:00:00.000 1 
2   Alan 2016-08-30 08:45:00.000 1 
3   John 2016-08-30 09:02:00.000 1 
4   Steven 2016-08-30 07:30:00.000 1 
5   Joe  2016-08-30 11:00:00.000 2 
6   Mike 2016-08-30 17:30:00.000 1 
7   Joe  2016-08-30 12:00:00.000 3 
+0

よろしくお願いします。私は今これで自分の道を尽くし、すぐにあなたに戻ってきます – Crezzer7

+0

そのトリックはあります!大変お手伝いをしてくれました。次回は混乱を避けるために質問にすぐに詳細を追加してください! – Crezzer7

+0

お寄せいただきありがとうございます。元の質問に対するより明確な説明は、おそらく次回の投票(他者からの投票)を避けるでしょう。私たちは生きていると学ぶ:) –

1

ような何か:

select *, row_number() over(partition by user, cast(eventtime as date) order by eventtime) as status 
from datatable 

は、トリックを行う必要があります。

しかし、パフォーマンス上の理由から、計算された列をキャスト(eventtimeとしての日付)、複合列のこの列とユーザー列、元のイベント時間列として作成することをお勧めします。

関連する問題