gpt4 book ai didi

SQL 语句 HAVING MAX(some+thing)=some+thing

转载 作者:行者123 更新时间:2023-12-04 06:54:54 26 4
gpt4 key购买 nike

我在使用 Microsoft Access 2003 时遇到问题,它提示以下声明:

select cardnr
from change
where year(date)<2009
group by cardnr
having max(time+date) = (time+date) and cardto='VIP'

我想要做的是,对于表中每个不同的 cardnr 更改,找到最新(时间+日期)在 2009 年之前的行,然后只选择带有 cardto='VIP' 的行。

validator说可以,Access 说不行。

这是我收到的消息:“您尝试执行的查询不包含指定的表达式 'max(time+date)=time+date and cardto='VIP' and cardnr=' 作为聚合函数的一部分。”

有人可以解释一下我做错了什么以及正确的方法吗?谢谢

注意:字段名和表名是经过翻译的,不会与任何保留字冲突,我对名称没有问题。

最佳答案

试着这样想 - 在聚合完成后应用 HAVING。
因此它无法与未聚合的表达式进行比较(无论是时间+日期,还是 cardto)。

但是,要获取最后一个(原则与获取与 weel 其他聚合函数相关的行的原则相同)时间和日期,您可以执行以下操作:

SELECT cardnr
FROM change main
WHERE time+date IN (SELECT MAX(time+date)
FROM change sub
WHERE sub.cardnr = main.cardnr AND
year(date)<2009
AND cardto='VIP')

(假设您的时间字段上的日期部分对于所有记录都是相同的;有两个日期/时间字段不符合您的最佳利益,并且在某些情况下使用字段名称的保留字可能会适得其反)

它起作用是因为子查询仅根据您从外部查询中感兴趣的记录进行过滤。

将相同的 year(date)<200 和 cardto='VIP' 应用于外部查询可以进一步提高性能。

关于SQL 语句 HAVING MAX(some+thing)=some+thing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2670608/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com