仅使用最新日期SQL更新ID(第2个,共6个)
我有以下表格: 以及: 我提出了这个问题:仅使用最新日期SQL更新ID(第2个,共6个),sql,sql-server,tsql,Sql,Sql Server,Tsql,我有以下表格: 以及: 我提出了这个问题: Update Table 1 SET DY_H_ID = ( SELECT MAX(ID) FROM Table 2 WHERE H_DateTime <= DY_Date AND H_IDX = DY_IDX AND H_HA_ID = 7 AND H_HSA_ID = 19 AND H_Description LIKE 'Diary item added for :%'
Update Table 1
SET DY_H_ID = (
SELECT MAX(ID)
FROM Table 2
WHERE H_DateTime <= DY_Date
AND H_IDX = DY_IDX
AND H_HA_ID = 7
AND H_HSA_ID = 19
AND H_Description LIKE 'Diary item added for :%'
)
WHERE DY_H_ID IS NULL AND DY_IDX IS NOT NULL
其结果是:
但是,此查询将更新所有6行。我只需要用最新日期更新两行,即“2013-08-29 15:00:00.000”。这意味着6条记录中只有2条将被更新,其余4条将保持为空
如何通过添加到上述查询来实现这一点?我知道这可能不太理想,但除了这样做别无选择。我不明白的是,如何只选择最新的日期而不硬编码。此数据可能会更改,并且不会总是相同的日期等。只需在其中添加另一个条件:
Update Table 1
SET DY_H_ID = (
SELECT MAX(ID)
FROM Table 2
WHERE H_DateTime <= DY_Date
AND H_IDX = DY_IDX
AND H_HA_ID = 7
AND H_HSA_ID = 19
AND H_Description LIKE 'Diary item added for :%'
)
WHERE DY_H_ID IS NULL AND DY_IDX IS NOT NULL
and DY_Date = (select max(DY_Date) from Table 1)
只需在其中添加另一个条件:
Update Table 1
SET DY_H_ID = (
SELECT MAX(ID)
FROM Table 2
WHERE H_DateTime <= DY_Date
AND H_IDX = DY_IDX
AND H_HA_ID = 7
AND H_HSA_ID = 19
AND H_Description LIKE 'Diary item added for :%'
)
WHERE DY_H_ID IS NULL AND DY_IDX IS NOT NULL
and DY_Date = (select max(DY_Date) from Table 1)
试试这个:
UPDATE TABLE 1
SET DY_H_ID = (SELECT Max(ID)
FROM TABLE 2
WHERE H_DATETIME <= DY_DATE
AND H_IDX = DY_IDX
AND H_HA_ID = 7
AND H_HSA_ID = 19
AND H_DESCRIPTION LIKE 'Diary item added for :%')
WHERE DY_H_ID IS NULL
AND DY_IDX IS NOT NULL
AND DY_DATE = (SELECT Max(DY_DATE)
FROM TABLE1)
试试这个:
UPDATE TABLE 1
SET DY_H_ID = (SELECT Max(ID)
FROM TABLE 2
WHERE H_DATETIME <= DY_DATE
AND H_IDX = DY_IDX
AND H_HA_ID = 7
AND H_HSA_ID = 19
AND H_DESCRIPTION LIKE 'Diary item added for :%')
WHERE DY_H_ID IS NULL
AND DY_IDX IS NOT NULL
AND DY_DATE = (SELECT Max(DY_DATE)
FROM TABLE1)
使用CTE,与SQL-Server-2005或更高版本兼容
使用CTE,与SQL-Server-2005或更高版本兼容
您使用的是哪个版本的sql server?我使用的是sql server 2012。您使用的是哪个版本的sql server?我使用的是sql server 2012。如果在WHERE子句中添加附加条件,效果会非常好。谢谢@Luis LL我可以问一下@Luis LL,如果这个更新语句被使用过,比如说1000 000条记录,那么使用cte方法会有任何性能改进吗?这种做法是否比使用其他方法更好、更干净,或者您为什么从一开始就使用cte?没有必要,在某些情况下会非常有效,在许多情况下,cte的预取可以真正提高性能,在某些情况下不会影响性能。还有第三种尝试方法,即使用内部连接CTE查询,它也可以执行得更好。有很多不同的因素,比如索引、内存、统计数据、每个表中的行数等等,来给出一个绝对的响应。知道了,我现在明白了。我也读过一些关于使用它们进行递归等的文章,这可能非常好。这是CTE的另一个伟大用途,在上面的例子中,我使用它是为了简单,因为我不喜欢SELECT中的SELECT[mycolumns]语法。。。我的桌子。继续阅读CTE,祝你好运!如果我在WHERE子句中添加附加条件,这将非常有效。谢谢@Luis LL我可以问一下@Luis LL,如果这个更新语句被使用过,比如说1000 000条记录,那么使用cte方法会有任何性能改进吗?这种做法是否比使用其他方法更好、更干净,或者您为什么从一开始就使用cte?没有必要,在某些情况下会非常有效,在许多情况下,cte的预取可以真正提高性能,在某些情况下不会影响性能。还有第三种尝试方法,即使用内部连接CTE查询,它也可以执行得更好。有很多不同的因素,比如索引、内存、统计数据、每个表中的行数等等,来给出一个绝对的响应。知道了,我现在明白了。我也读过一些关于使用它们进行递归等的文章,这可能非常好。这是CTE的另一个伟大用途,在上面的例子中,我使用它是为了简单,因为我不喜欢SELECT中的SELECT[mycolumns]语法。。。我的桌子。继续阅读CTE,祝你好运!太好了,这在Gidil的时候非常有效。这就是为什么我是SQL noob的原因,哈哈。我想你是第一个,所以我会打标记作为答案。太好了,这是完美的@Gidil。这就是为什么我是SQL noob的原因,哈哈。我想你是第一个,所以我会记下答案。