2015-04-27 5 views
1

Я использую базу данных SQL Server 2005. В нем у меня есть таблица аудита и хотелось бы знать, когда значение было изменено относительно периода. Период просто имеет дату начала и любое изменение аудита после его отображения до следующей даты начала периода. Если нет даты начала следующего периода, я также хотел бы отобразить результат.SQL Регистрация по дате окончания

Вот код для создания таблицы и ввода данных:

CREATE TABLE [dbo].[Period](
[Id] [int] NOT NULL, 
[Name] [varchar](50) NOT NULL, 
[StartDate] [datetime] NOT NULL 
) 

INSERT INTO [dbo].[Period] VALUES (1, 'Period 1', '2015-03-01') 
INSERT INTO [dbo].[Period] VALUES (2, 'Period 2', '2015-04-01') 
INSERT INTO [dbo].[Period] VALUES (3, 'Period 3', '2015-05-01') 

CREATE TABLE [dbo].[Audit](
    [Id] [int] NOT NULL, 
    [OldValue] [VARCHAR](50), 
    [NewValue] [VARCHAR](50), 
    [DateModified] [DATETIME] NOT NULL, 
) 

INSERT INTO [dbo].[Audit] VALUES (1, 'Old Value 1', 'New Value 1', '2015-03-27') 
INSERT INTO [dbo].[Audit] VALUES (2, 'Old Value 2', 'New Value 2', '2015-04-03') 
INSERT INTO [dbo].[Audit] VALUES (3, 'Old Value 3', 'New Value 3', '2015-04-09') 
INSERT INTO [dbo].[Audit] VALUES (4, 'Old Value 4', 'New Value 4', '2015-05-12') 

http://sqlfiddle.com/#!6/b012c

То, что я хотел бы это, чтобы отобразить данные следующим образом:

Period 1 | Old Value 1 | New Value 1 
Period 2 | Old Value 2 | New Value 2 
Period 2 | Old Value 3 | New Value 3 
Period 3 | Old Value 4 | New Value 4 

Может кто-нибудь объяснить, какой метод использовать?

+0

Какая версия SQL Server вы используете? –

+0

К сожалению, SQL Server 2005 :(- Я обновлю вопрос, чтобы уточнить – Yetiish

+0

Являются ли периоды всегда увеличенными на 1 месяц? –

ответ

1
select 
    (select top 1 Name from Period where StartDate < DateModified order by StartDate desc), 
    a.OldValue, 
    a.NewValue 
from Audit a 
+0

Это было намного проще, чем я думал, что это происходит быть. Спасибо. – Yetiish

1

Это должно работать для того, что вы после:

Select P.Name, A.OldValue, A.NewValue 

From Period P 
LEFT JOIN 
Period P2 on P2.Id = P.Id + 1 
INNER JOIN 
Audit A on A.DateModified > P.StartDate and (A.DateModified < P2.StartDate or P2.StartDate is null) 
Смежные вопросы