SQL查询以选择行以进行数据值更改

时间:2017-05-17 22:24:36

标签: sql sql-server-2008

我想提取ID更改值的所有记录。例如,我想编写一个查询来拉取ID 1,其中Date和Value会发生变化。我还想从这个数据集中提取旧记录和新记录:

Date      ID  Value
1/1/2015    1   5
2/2/2016    2   1
3/3/2017    1   7
4/4/2017    3   4
5/1/2017    2   1
5/6/2017    1   8

期望的结果:

Date    ID  Value
1/1/2015    1   5
3/3/2017    1   7
5/6/2017    1   8

正如下面所指出的,我必须提取超过200,000个唯一ID,因此ID = 1将无效。

2 个答案:

答案 0 :(得分:1)

这里(在子查询中),我们只选择id(其中)min(Value)不等于max(value)。然后是一个简单的连接来显示细节。

示例

Declare @YourTable Table ([Date] varchar(50),[ID] int,[Value] int)
Insert Into @YourTable Values
 ('1/1/2015',1,5)
,('2/2/2016',2,1)
,('3/3/2017',1,7)
,('4/4/2017',3,4)
,('5/1/2017',2,1)
,('5/6/2017',1,8)

Select A.*
 From  @YourTable A
 Join (
        Select ID
         From @YourTable
         Group By ID
         Having min(Value)<>max(Value)
      ) B  on A.ID=B.ID

<强>返回

Date        ID  Value
1/1/2015    1   5
3/3/2017    1   7
5/6/2017    1   8

答案 1 :(得分:0)

您可以使用触发器捕获插入,更新和删除的记录。使用Select * from deleted查找已删除的记录,使用Select * from Inserted查找已插入的记录。有关详细信息,请参阅https://docs.microsoft.com/en-us/sql/relational-databases/triggers/use-the-inserted-and-deleted-tables