上位n個のグループのレコードを選択します。n個のグループのすべてのレコードを選択するには?
テーブル 'ランナー':
id gid status rtime
---------------------------
100 5550 1 2016-08-19
200 5550 2 2016-08-22
300 5550 1 2016-08-30
100 6050 3 2016-09-01
200 6050 1 2016-09-02
100 6250 1 2016-09-11
200 6250 1 2016-09-15
300 6250 3 2016-09-19
テーブル '静的'
id description env
-------------------------------
100 something 1 somewhere 1
200 something 2 somewhere 2
300 something 3 somewhere 3
ユニットID(ID)がグループ内で一意であるが、その列内で一意でない私のデータは、このようになりますグループのインスタンスが定期的に生成されるためです。グループid(gid)はすべてのユニットに割り当てられますが、複数のインスタンスでは生成されません。
テーブルを結合してすべてを選択するか、特定の値でフィルタするのは簡単ですが、グループIDを直接参照せずに、たとえば最初の2つのグループのすべてのレコードを選択するにはどうすればよいですか? 期待される結果は次のようになります。
id gid description status rtime
--------------------------------------
300 6250 something 2 3 2016-09-19
200 6250 something 1 1 2016-09-15
100 6250 something 3 1 2016-09-11
200 6050 something 2 1 2016-09-02
100 6050 something 1 3 2016-09-01
エクストラ質問:私はこのようなタイムフレームをフィルタリングする場合:
[...]
WHERE runner.rtime BETWEEN '2016-08-25' AND '2016-09-16'
確保する簡単な方法は、グループが切断されていないこと、ありますが、どちらかで表示されますすべてのレコードか全くないのですか?
次の2つのクエリを必要とするだろう。これらの2つのグループIDを使用してこれらの2つのグループのすべてのレコードを取得する親クエリを作成します。 –
SQL Serverのウィンドウ関数、ROW_NUMBER、NTILEなどを参照してください。 – SQLMason