Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 根据某些组更新特定记录_Sql Server 2008_Sql Server 2008 R2 - Fatal编程技术网

Sql server 2008 根据某些组更新特定记录

Sql server 2008 根据某些组更新特定记录,sql-server-2008,sql-server-2008-r2,Sql Server 2008,Sql Server 2008 R2,我使用的是SQLServer2008R2 我有一个数据库表,其中包含一些用户数据,如下所示: Id UserId Sys Dia ReadingType DataId IsDeleted 1 10 98 65 last 1390556024216 0 2 10 99 69 average 1390556024216

我使用的是
SQLServer2008R2

我有一个数据库表,其中包含一些用户数据,如下所示:

Id  UserId  Sys     Dia     ReadingType     DataId              IsDeleted
1   10      98      65      last            1390556024216       0
2   10      99      69      average         1390556024216       0
3   10      102     96      last            1390562788540       0
4   10      102     96      average         1390562788540       0
5   11      130     98      last            1390631241547       0
6   11      130     98      average         1390631241547       0
7   2       285     199     first           1390770562374       0
8   2       250     180     last            1390770562374       0
9   2       267     189     average         1390770562374       0
10  1       258     180     first           1391191009457       0
11  1       258     180     last            1391191009457       0
12  1       258     180     average         1391191009457       0
13  1       285     199     additional      1391191009457       0
14  22      110     78      last            1391549208338       0
15  22      123     83      last            1391549208349       0
在此表中,有些记录的数据ID相同,但读取类型不同

我想为具有
ReadingType='last'
的记录设置
IsDeleted=1
,并且具有具有
ReadingType='average'
且具有
相同数据ID、Sys、Dia和UserId的记录

因此,期望的结果应该是:

Id  UserId  Sys     Dia     Reading         DataId              IsDeleted
1   10      98      65      last            1390556024216       0
2   10      99      69      average         1390556024216       0
3   10      102     96      last            1390562788540       1
4   10      102     96      average         1390562788540       0
5   11      130     98      last            1390631241547       1
6   11      130     98      average         1390631241547       0
7   2       285     199     first           1390770562374       0
8   2       250     180     last            1390770562374       0
9   2       267     189     average         1390770562374       0
10  1       258     180     first           1391191009457       0
11  1       258     180     last            1391191009457       1
12  1       258     180     average         1391191009457       0
13  1       285     199     additional      1391191009457       0
14  22      110     78      last            1391549208338       0
15  22      123     83      last            1391549208349       0
此处,Id为3、5和11的记录应标记为已删除,因为它们具有相同的用户Id、Sys、Dia、DataId和ReadingType=“last”,而另一条记录具有相同的其他字段ReadingType=“average”


有谁能帮我找到这样的记录并更新它们吗?

只需将更新与EXISTS子查询一起使用即可:

UPDATE T   
  SET IsDeleted=1
      WHERE
           ReadingType='last'  
           AND 
           EXISTS(SELECT * FROM T as T1 
                    WHERE T1.ReadingType='average'
                          AND T1.DataId=T.DataId
                          AND T1.Sys=T.Sys
                          AND T1.Dia=T.Dia
                          AND T1.UserId=T.UserId
                   )

您可以通过多种方式解决问题,但在这里,我使用子查询来解决您的问题

UPDATE TABLE SET IsDeleted=1
       WHERE DataId=(SELECT DataId FROM TABEL WHERE Reading='last') 

伙计,在你发布任何答案之前,只需检查一下你的问题。您认为子查询将只返回DataId吗?这里很容易出错。同样,如果您仅从子查询中选择DataId,那么它也将为所有记录设置IsDeleted=1。我在贬低你的答案。非常感谢。这对我来说很管用+谢谢你友好的回答。