SQL 按滚动日期加入

标签 sql sql-server

我使用的是 SQL Server 2005 数据库。在其中我有一个审计表,并且想知道一个值相对于一个时期发生了变化。该期间只有一个开始日期,之后的任何审计更改都应显示到下一个期间的开始日期。如果没有下一期开始日期,我也想显示结果。

下面是创建表格和输入数据的代码:

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

谁能解释一下使用什么技术?

最佳答案

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

关于SQL 按滚动日期加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29894571/

相关文章:

sql-server - 将字符串转换为 Int SSIS

sql - 有条件地平均值并将它们显示在不同的列中?

sql - 在 SQL 中删除数百万条记录的最佳方法是什么?

php - 查询失败后,ID 仍在数据库中递增

c# - 如何解决警告 "Referenced assembly targets a different processor than the application"

sql - 如何用sql计算累计时间差

java - 在 Java 中运行 MySQL 查询?

mysql - 同表SQL操作

sql - 如何使用查询取消选择多值查找字段中的值

mysql - 我正在寻找一种有效的方法将 mysql 中的多个空列合并到单个表中