Access SQL:无法使用 Max() 和 Min() 值更新列表
Posted
技术标签:
【中文标题】Access SQL:无法使用 Max() 和 Min() 值更新列表【英文标题】:Access SQL: Update list with Max() and Min() values not possible 【发布时间】:2019-11-25 07:52:18 【问题描述】:我有一个日期列表:list_of_dates。
我想用这个代码 (#1) 找到每个数字的最大值和最小值。
它应该如何工作,因此我得到了表格 MinMax
现在我想用这些新获得的值 (#2) 更新另一个列表 (list_of_things)。
但是,这是不可能的。 我认为这是由于 DISTINCT 以及我总是得到每个数字两行的事实,每行都有最小值和最大值。因此无法进行更新。 不幸的是,我不知道其他方法。
#1
SELECT a.number, b.MaxDateTime, c.MinDateTime
FROM (list_of_dates AS a
INNER JOIN (
SELECT a.number, MAX(a.dat) AS MaxDateTime
FROM list_of_dates AS a
GROUP BY a.number) AS b
ON a.number = b.number)
INNER JOIN (SELECT a.number, MIN(a.dat) AS MinDateTime
FROM list_of_dates AS a
GROUP BY a.number) AS c
ON a.number = c.number;
#2
UPDATE list_of_things AS a
LEFT JOIN MinMax AS b
ON a.number = b.number
SET a.latest = b. MaxDateTime, a.ealiest = b.MinDateTime```
【问题讨论】:
当涉及到不可编辑的查询时,无法完成 UPDATE 操作。有或没有 DISTINCT,句号。聚合查询是不可编辑的数据集。无论如何,保存聚合数据通常是个坏主意。您可以遍历 VBA 中的记录集并使用记录集中的值更新记录。或者将记录保存到“临时”表中,然后在 UPDATE 操作中使用该表。 【参考方案1】:MS Access update
查询的任何部分都不能包含聚合,否则生成的记录集将变为“不可更新”。
在您的情况下,在 MinMax
子查询中使用 min
和 max
聚合函数会导致最终的 update
查询变得不可更新。
虽然存储聚合数据并不总是可取的(有利于使用查询从事务数据生成输出),但如果您确实需要这样做,这里有两种可能的方法:
1。使用临时表存储聚合结果
运行select into
查询,如下所示:
select
t.number,
max(t.dat) as maxdatetime,
min(t.dat) as mindatetime
into
temptable
from
list_of_dates t
group by
t.number
要生成一个名为 temptable
的临时表,然后运行以下 update
查询,该查询的日期来自该临时表:
update
list_of_things t1 inner join temptable t2
on t1.number = t2.number
set
t1.latest = t2.maxdatetime,
t1.earliest = t2.mindatetime
2。使用域聚合函数
由于domain aggregate functions(dcount
、dsum
、dmin
、dmax
等)与查询的评估分开评估,因此它们不会破坏查询的可更新性质。
因此,您可以考虑使用如下查询:
update
list_of_things t1
set
t1.latest = dmax("dat","list_of_dates","number = " & t1.number),
t1.earliest = dmin("dat","list_of_dates","number = " & t1.number)
【讨论】:
【参考方案2】:这是在黑暗中拍摄,但请尝试按照 SQL Update woes in MS Access - Operation must use an updateable query 添加 DistinctRow
也可以尝试使用内连接。如果需要,可以先将查询中的所有记录更新为空值,以模拟外连接的效果。
【讨论】:
以上是关于Access SQL:无法使用 Max() 和 Min() 值更新列表的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 2012 中作为 Varbinary(MAX) 的照片在 Access 2010 中导致错误 502753
如何使用 PHP、SQL 和 Microsoft Access 将另一个表中的 select max 函数和用户输入的变量插入表中?
无法使用 SSIS 将 SQL Server varchar(max) 传输到 MySQL 文本