我正在使用SQL Server 2005数据库。在其中我有一个Audit表,想知道相对于句点的值何时发生了变化。该期间只有一个开始日期,之后的任何审核更改都应显示到下一个期间的开始日期。如果没有下一个周期开始日期,我还想显示结果。
以下是创建表和输入数据的代码:
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 :(得分:1)
select
(select top 1 Name from Period where StartDate < DateModified order by StartDate desc),
a.OldValue,
a.NewValue
from Audit a
答案 1 :(得分: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)