DATEフィールドを持つ連想テーブルがあります。
| DATE | USER_ID | GROUP_ID |
| 2012-09-20 00:00:00 | 7 | 1 |
| 2012-09-20 00:00:00 | 6 | 1 |
| 2012-09-13 00:00:00 | 5 | 1 |
| 2012-09-10 00:00:00 | 1 | 1 |
| 2012-09-02 00:00:00 | 5 | 3 |
| 2012-08-02 00:00:00 | 5 | 2 |
| 2012-07-01 00:00:00 | 5 | 1 |
| 2012-07-01 00:00:00 | 3 | 1 |
各レコードは、ユーザーとグループの間の関連付けを表します。各関連付けは、表に示されている日付から有効であり、新しい関連付けが表に挿入されるまで一定のままです。
特定の日付のユーザーとグループの関連付けを知るのは非常に簡単です。表示された日付よりも小さい最大の日付を選択するだけです。
しかし今、特定のグループに関連付けられているすべてのユーザーを日付の範囲で抽出する必要があります。提供されるパラメーターは、 group_id、date_from、date_toです。
これを Linq で実装する必要がありますが、T-SQL を使用して手順をテストしようとしています。
それが私が試したことです:
SELECT *
FROM user_group
where group_id = 1
and '2012-09-11' <= date
and date <= '2012-09-20'
UNION
SELECT TOP 1 *
FROM user_group
where group_id = 1
and date <= '2012-09-11'
order by date desc
しかし、明らかにそれは機能しません...
ノート:
主な問題は、from_dateより前に作成された関連付けを取得することですが、まだ有効であることです。明確にするために、次の結果を取得する必要があります。
| DATE | USER_ID | GROUP_ID |
| 2012-09-20 00:00:00 | 7 | 1 |
| 2012-09-20 00:00:00 | 6 | 1 |
| 2012-09-13 00:00:00 | 5 | 1 |
| 2012-09-10 00:00:00 | 1 | 1 |
| 2012-07-01 00:00:00 | 3 | 1 |