SQL Server 2016があります。長年にわたり、独自の履歴があります。今では、履歴データを新しい形式に変換し、CustomAuditテーブルを履歴テーブルとして使用して、使用可能な履歴データを使用したいとします。初めのためにSQL Server:履歴データを一時テーブルに変換する
は、質問
CREATE TABLE [dbo].[client]
(
idclient int identity(1,1) primary key,
clientData nvarchar (400)
) ON [PRIMARY]
INSERT [dbo].[client] (clientData) values ('some-12221')
INSERT [dbo].[client] (clientData) values ('some-22111')
alter table [client]
add
StartTime datetime2 GENERATED ALWAYS AS ROW START DEFAULT GETUTCDATE(),
EndTime datetime2 GENERATED ALWAYS AS ROW END DEFAULT CONVERT(DATETIME2, '9999-12-31 23:59:59.9999999'),
PERIOD FOR SYSTEM_TIME (StartTime,EndTime)
CREATE TABLE [dbo].[CustomAydit_client]
(
idclient int,
dEditDate datetime NOT NULL DEFAULT (getdate()),
clientData nvarchar (400)
) ON [PRIMARY]
alter table [CustomAydit_client]
add
StartTime datetime2 GENERATED ALWAYS AS ROW START DEFAULT GETUTCDATE(),
EndTime datetime2 GENERATED ALWAYS AS ROW END DEFAULT CONVERT(DATETIME2, '9999-12-31 23:59:59.9999999'),
PERIOD FOR SYSTEM_TIME (StartTime,EndTime)
INSERT [dbo].[CustomAydit_client] (idclient, dEditDate, clientData)
VALUES (1, (CAST(N'2016-05-06 10:08:11.923' AS DateTime)), 'some-1')
INSERT [dbo].[CustomAydit_client] (idclient, dEditDate, clientData)
VALUES (1, (CAST(N'2016-02-11 10:08:11.923' AS DateTime)), 'some-211')
INSERT [dbo].[CustomAydit_client] (idclient, dEditDate, clientData)
VALUES (2, (CAST(N'2016-12-06 10:08:11.923' AS DateTime)), 'some-1')
INSERT [dbo].[CustomAydit_client] (idclient, dEditDate, clientData)
VALUES (1, (CAST(N'2015-05-19 10:08:11.923' AS DateTime)), 'some-1')
INSERT [dbo].[CustomAydit_client] (idclient, dEditDate, clientData)
VALUES (2, (CAST(N'2016-05-06 10:08:11.923' AS DateTime)), 'some-211')
INSERT [dbo].[CustomAydit_client] (idclient, dEditDate, clientData)
VALUES (1, (CAST(N'2016-05-26 10:08:11.923' AS DateTime)), 'some-1')
INSERT [dbo].[CustomAydit_client] (idclient, dEditDate, clientData)
VALUES (2, (CAST(N'2016-05-06 10:08:11.923' AS DateTime)), 'some33-1')
INSERT [dbo].[CustomAydit_client] (idclient, dEditDate, clientData)
VALUES (1, (CAST(N'2016-05-06 10:08:11.923' AS DateTime)), 'some3-1')
INSERT [dbo].[CustomAydit_client] (idclient, dEditDate,clientData)
VALUES (2, (CAST(N'2016-11-16 10:08:11.923' AS DateTime)), 'some-1')
INSERT [dbo].[CustomAydit_client] (idclient, dEditDate, clientData)
VALUES (1, (CAST(N'2016-02-17 10:08:11.923' AS DateTime)), 'some-1')
は、私は、行のため、行のためのStartTimeを必要とし、小さな例があるでしょう。
は、顧客1については、私は、クライアントは、このOK 9999から12終了時間を持つべきではない行にフィールドDeditDate
更新このデータ行1つのフィールドの終了時間
そして、最後の行の2つのデータを取りたいです-31 23:59:59.9999999
SELECT
ROW_NUMBER() OVER(PARTITION BY idclient ORDER BY dEditDate) AS tempid,
idclient,
dEditDate,
StartTime, EndTime
FROM
[dbo].[CustomAydit_client]
ORDER BY
idclient, dEditDate
あなたはテーブル定義とサンプルデータを投稿してくれました。しかし、あなたが出力として望むものは私にはあまり明確ではありません。 –
StartTimeとEndTimeが必要な行の一時テーブル。私はEndTimeを正しく行う方法はありません。私のデータを使用 – GoAnatol
私はそのようなsomesingが必要ですhttps://1drv.ms/i/s!ApEvwFL7i3nmkvlgTivat9If6J_vdQ – GoAnatol