これはSQL Server 2016データベース用です。このケース(SQL Server)の代わりにSQLを作成する方法の提案が必要です
Iは以下のように、2つのテーブルを有する:
表:
- GlobalIdのUNIQUEIDENTIFIER、
- 日付DATETIME2、
- 説明
表B :
- GlobalId UNIQUEIDENTIFIER、
- Rel_GlobalId UNIQUEIDENTIFIER、
- ファイル名はnvarchar(250)、
- 日付DATETIME2
は、テーブルAとテーブルBとの関係は1対多であり、または '表AのA行に表Bの1つ以上の行が含まれています。
Bには、常に1つ以上の行が含まれていますA.しかし、最初の行と最後の行だけが必要です(表Bの日付でソートされています)。したがって、表Aの行にも表Bの行が10行あります。
GlobalId (from A), First_File (GlobalId from B), Last_File (GlobalID from B), First_File_Num*, Last_File_Num*
First_File_Num
とLast_File_Num
1から無限大まで開始、シーケンシャル番号であるが、これ:私は次の形式で値を返さなければならない最初のB.
のみ1 B必要ました単一の連続番号です。 Aが2つのB、first_file_num = 1、およびlast_file_num = 2を有する場合、連続した行では、その連続番号は最後の行から継続しなければならないので、3と4、さらに5と6などでなければならない。この行の増分は1だけです。
物事をより明確にする(と英語は私の第一言語ではないので)、一例として、これを取る:
表A:
+----------+------------+----------------+
| GlobalId | Date | Description |
+----------+------------+----------------+
| aa | 2016-12-06 | Description 01 |
| ab | 2016-12-07 | Description 02 |
| ac | 2016-12-07 | Description 03 |
+----------+------------+----------------+
表B:
+----------+--------------+------------+---------------------+
| GlobalId | Rel_GlobalId | Filename | Date |
+----------+--------------+------------+---------------------+
| ba | aa | file02.jpg | 2016-12-06 05:13:25 |
| bb | aa | file01.jpg | 2016-12-06 03:45:12 |
| bc | ab | file03.jpg | 2016-12-07 08:54:31 |
| bd | ac | file05.jpg | 2016-12-07 11:39:19 |
| be | ac | file04.jpg | 2016-12-07 10:48:13 |
| bf | ac | file06.jpg | 2016-12-07 15:08:17 |
+----------+--------------+------------+---------------------+
表Aと表Bとの関係は、A.GlobalId = B.Rel_GlobalId
だから、今、私は次のようなデータを持つテーブルを返す必要があります。この問題を解決するには
+----------+------------+-----------+----------------+---------------+
| GlobalId | First_File | Last_File | First_File_Num | Last_File_Num |
+----------+------------+-----------+----------------+---------------+
| aa | bb | ba | 01 | 02 |
| ab | bc | NULL | 03 | NULL |
| ac | be | bf | 04 | 05 |
+----------+------------+-----------+----------------+---------------+
、私は、関数(テーブル値関数)を作成しましたが、私はこれが可能であるかどうかを知りたいですD
row_numbers()、日付が1のもの、日付descのもの。サブクエリ/ CTEに入れて、両方のrow_numbersが1である場所を選択します。 – HoneyBadger
そして、「First_File_Num」と「Last_File_Num」の連続番号はどこで取得できますか?彼らは既に表Bに入っていますか?またはFileNameにはありますか? – DVT
@DVT彼らはどこにもいません。それはオンザフライで '計算'されなければならない連続番号です。単なるシーケンスです。 –