数据库最大值

时间:2022-01-19 15:12:28
 在数据库中找出2013年到2015年每一年中H1字段的最大值最小值,
             SQLstr = "select dtime, MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 from realData rl1 where DATEPART('yyyy',dtime) in (select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between 2013 and 2015  group by DATEPART('yyyy',dtime))";

总是提示"试图执行的查询中不包含作为合计函数一部分的特定表达式 'dtime'"
 
数据库access ,表如下图
数据库最大值

16 个解决方案

#1


dtime是啥??

如果你是想获取最大值那一行的dtime
你需要做个嵌套查询

先查出最大值,然后根据最大值再去查那一行数据

#2


而且你这逻辑也很成问题

最大值可能有多行(值相同),你到底要哪一行的dtime??

自己先把逻辑弄清楚,再想如何实现这个功能

#3





select max(dtime) as  dt1 , MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 
from tbl2  group by  DATEPART(yyyy,dtime)


这么写查出来 dt1 的值, 沒啥意义.

#4


引用 2 楼 Z65443344 的回复:
而且你这逻辑也很成问题

最大值可能有多行(值相同),你到底要哪一行的dtime??

自己先把逻辑弄清楚,再想如何实现这个功能

需求是分别找出2013年,2014年,2015年 ,h1的最大值,最小值,年份是可选,不确定的,

实现的想法是先对年份进行分组,直接where条件出2013,2014,2015,sql语句如下,select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between 2013 and 2015  group by DATEPART('yyyy',dtime))
结果表内容是 数据库最大值


年份找到后再找出年份中的最大值,最小值,显示年,最大值,最小值,语句就如下 SQLstr = "select dtime, MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 from realData rl1 where DATEPART('yyyy',dtime) in (select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between 2013 and 2015  group by DATEPART('yyyy',dtime))";


只要在第一个select 后面加上DATEPART('yyyy',dtime) as 年,就出错,dtime是日期类型的

#5


            SQLstr = "select MAX(DATEPART('yyyy',dtime))as 年, MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 from realData rl1 where DATEPART('yyyy',dtime) in (select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between '2013' and '2015'  group by DATEPART('yyyy',dtime))";

只显示2015年的最大值的记录,2013年,2014年的都没有呢,

数据库最大值

#6


既然你只要找到年份的最大值最小值,详细时间还显示来干啥

#7


SQLstr = "select  DATEPART('yyyy',dtime)), MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 from realData rl1 where DATEPART('yyyy',dtime) in (select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between 2013 and 2015  group by DATEPART('yyyy',dtime))";

#8


引用 7 楼 Z65443344 的回复:
SQLstr = "select  DATEPART('yyyy',dtime)), MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 from realData rl1 where DATEPART('yyyy',dtime) in (select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between 2013 and 2015  group by DATEPART('yyyy',dtime))";


引用 6 楼 Z65443344 的回复:
既然你只要找到年份的最大值最小值,详细时间还显示来干啥


我要显示在2013年中h1的最大值,在2014年中h1的最大值,2015年中h1的最大值

#9


是啊,那你显示完最大值,前面带上是哪一年就好了啊,也就是
DATEPART('yyyy',dtime)
这个东西,只要年份

不要把年月日时分秒都弄出来

#10


既然你是按年group by分组查询的
月日时分秒的信息早被合并没有了,上哪里取去

#11


引用 7 楼 Z65443344 的回复:
SQLstr = "select  DATEPART('yyyy',dtime)), MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 from realData rl1 where DATEPART('yyyy',dtime) in (select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between 2013 and 2015  group by DATEPART('yyyy',dtime))";



报错呀"试图执行的查询中不包含作为合计函数一部分的特定表达式 'DATEPART('yyyy',dtime)' 。"我之前就是这么写的,一直报这个错误,加上MAX不出错了,只显示2015年了
要崩溃了

#12


引用 9 楼 Z65443344 的回复:
是啊,那你显示完最大值,前面带上是哪一年就好了啊,也就是
DATEPART('yyyy',dtime)
这个东西,只要年份

不要把年月日时分秒都弄出来


我就是这个意思,只要年份,
SQLstr = "select DATEPART('yyyy',dtime)), MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 from realData rl1 where DATEPART('yyyy',dtime) in (select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between 2013 and 2015  group by DATEPART('yyyy',dtime))"

这么写就报错,怎么才能把年份显示出来呢,

#13


只要使用了max集函数,再写其它字段就出错,写的测试语句
            SQLstr = "select dtime, MAX(h1)as 最大值 from realData";
也会报同样的错误:试图执行的查询中不包含作为合计函数一部分的特定表达式 'dtime' 

大家有没有其它的方法,能解决我要的需求呢

#14




select DATEPART(yyyy,dtime) as dtime, MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 
from realData  group by  DATEPART(yyyy,dtime)
having DATEPART(yyyy,dtime)>= '2013' and DATEPART(yyyy,dtime) <= '2015'

#15


你这个SQL语句还带select嵌套查询的
你先分解开,一个一个测试,看到底是外层报错,还是子查询报错,再想办法怎么改

#16


引用 14 楼 yangb0803 的回复:


select DATEPART(yyyy,dtime) as dtime, MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 
from realData  group by  DATEPART(yyyy,dtime)
having DATEPART(yyyy,dtime)>= '2013' and DATEPART(yyyy,dtime) <= '2015'


谢谢,比我写的好多了,简单明了,还是对sql不熟悉呀,继续努力

#1


dtime是啥??

如果你是想获取最大值那一行的dtime
你需要做个嵌套查询

先查出最大值,然后根据最大值再去查那一行数据

#2


而且你这逻辑也很成问题

最大值可能有多行(值相同),你到底要哪一行的dtime??

自己先把逻辑弄清楚,再想如何实现这个功能

#3





select max(dtime) as  dt1 , MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 
from tbl2  group by  DATEPART(yyyy,dtime)


这么写查出来 dt1 的值, 沒啥意义.

#4


引用 2 楼 Z65443344 的回复:
而且你这逻辑也很成问题

最大值可能有多行(值相同),你到底要哪一行的dtime??

自己先把逻辑弄清楚,再想如何实现这个功能

需求是分别找出2013年,2014年,2015年 ,h1的最大值,最小值,年份是可选,不确定的,

实现的想法是先对年份进行分组,直接where条件出2013,2014,2015,sql语句如下,select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between 2013 and 2015  group by DATEPART('yyyy',dtime))
结果表内容是 数据库最大值


年份找到后再找出年份中的最大值,最小值,显示年,最大值,最小值,语句就如下 SQLstr = "select dtime, MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 from realData rl1 where DATEPART('yyyy',dtime) in (select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between 2013 and 2015  group by DATEPART('yyyy',dtime))";


只要在第一个select 后面加上DATEPART('yyyy',dtime) as 年,就出错,dtime是日期类型的

#5


            SQLstr = "select MAX(DATEPART('yyyy',dtime))as 年, MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 from realData rl1 where DATEPART('yyyy',dtime) in (select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between '2013' and '2015'  group by DATEPART('yyyy',dtime))";

只显示2015年的最大值的记录,2013年,2014年的都没有呢,

数据库最大值

#6


既然你只要找到年份的最大值最小值,详细时间还显示来干啥

#7


SQLstr = "select  DATEPART('yyyy',dtime)), MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 from realData rl1 where DATEPART('yyyy',dtime) in (select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between 2013 and 2015  group by DATEPART('yyyy',dtime))";

#8


引用 7 楼 Z65443344 的回复:
SQLstr = "select  DATEPART('yyyy',dtime)), MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 from realData rl1 where DATEPART('yyyy',dtime) in (select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between 2013 and 2015  group by DATEPART('yyyy',dtime))";


引用 6 楼 Z65443344 的回复:
既然你只要找到年份的最大值最小值,详细时间还显示来干啥


我要显示在2013年中h1的最大值,在2014年中h1的最大值,2015年中h1的最大值

#9


是啊,那你显示完最大值,前面带上是哪一年就好了啊,也就是
DATEPART('yyyy',dtime)
这个东西,只要年份

不要把年月日时分秒都弄出来

#10


既然你是按年group by分组查询的
月日时分秒的信息早被合并没有了,上哪里取去

#11


引用 7 楼 Z65443344 的回复:
SQLstr = "select  DATEPART('yyyy',dtime)), MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 from realData rl1 where DATEPART('yyyy',dtime) in (select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between 2013 and 2015  group by DATEPART('yyyy',dtime))";



报错呀"试图执行的查询中不包含作为合计函数一部分的特定表达式 'DATEPART('yyyy',dtime)' 。"我之前就是这么写的,一直报这个错误,加上MAX不出错了,只显示2015年了
要崩溃了

#12


引用 9 楼 Z65443344 的回复:
是啊,那你显示完最大值,前面带上是哪一年就好了啊,也就是
DATEPART('yyyy',dtime)
这个东西,只要年份

不要把年月日时分秒都弄出来


我就是这个意思,只要年份,
SQLstr = "select DATEPART('yyyy',dtime)), MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 from realData rl1 where DATEPART('yyyy',dtime) in (select DATEPART('yyyy',dtime) as 年 from realData rl2 where DATEPART('yyyy',dtime) between 2013 and 2015  group by DATEPART('yyyy',dtime))"

这么写就报错,怎么才能把年份显示出来呢,

#13


只要使用了max集函数,再写其它字段就出错,写的测试语句
            SQLstr = "select dtime, MAX(h1)as 最大值 from realData";
也会报同样的错误:试图执行的查询中不包含作为合计函数一部分的特定表达式 'dtime' 

大家有没有其它的方法,能解决我要的需求呢

#14




select DATEPART(yyyy,dtime) as dtime, MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 
from realData  group by  DATEPART(yyyy,dtime)
having DATEPART(yyyy,dtime)>= '2013' and DATEPART(yyyy,dtime) <= '2015'

#15


你这个SQL语句还带select嵌套查询的
你先分解开,一个一个测试,看到底是外层报错,还是子查询报错,再想办法怎么改

#16


引用 14 楼 yangb0803 的回复:


select DATEPART(yyyy,dtime) as dtime, MAX(h1) as 最大值, MIN(h1) as 最小值, AVG(h1) as 平均值 
from realData  group by  DATEPART(yyyy,dtime)
having DATEPART(yyyy,dtime)>= '2013' and DATEPART(yyyy,dtime) <= '2015'


谢谢,比我写的好多了,简单明了,还是对sql不熟悉呀,继续努力