sqlserver 中max()函数的使用问题

useNorthwindgoselectmax(OrderDate)asOrderDatefromdbo.Ordersgroupbyconvert(char(6),Ord... use Northwind
go
select max (OrderDate) as OrderDate
from dbo.Orders
group by convert(char(6),OrderDate,112)

1997-04-30 00:00:00.000
1996-09-30 00:00:00.000
1996-10-31 00:00:00.000
1998-02-27 00:00:00.000
1997-06-30 00:00:00.000
..................略
这儿使用示例数据库中的查询每个月的月末时间
这儿convert(char(6),OrderDate,112)按YYYYMMDD样式显示
,这儿的OrderDate是怎样比较大小的,为什么会返回一组值,而不是
一个值?????????
展开
 我来答
dl_会飞的青蛙
2012-11-27 · TA获得超过2456个赞
知道大有可为答主
回答量:3294
采纳率:0%
帮助的人:3351万
展开全部
因为你按照日期分组了!~ 如果你想去最大的日期像下面这样写就可以了!~
select max (OrderDate) as OrderDate
from dbo.Orders

你要取的是每个月最大值不是吗?所以你的SQL应该是没有问题的!~
20121112
20121013
20120914
像上面这组值 就是你这个SQL取出来的,每个月只有一条值!~
追问
go
select OrderDate ,count (distinct(ShipCountry))
from dbo.Orders
group by convert(char(6),OrderDate,112)

为什么像这样查询时,会提示“
OrderDate该列没有包含在聚合函数或 GROUP BY 子句中。
”聚合函数之外的字段作为分组就可以了,这儿为什么还报错??
追答
select convert(char(6),OrderDate,112) ,count (distinct(ShipCountry))
from dbo.Orders
group by convert(char(6),OrderDate,112)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
琉璃易碎smile
2015-10-15 · TA获得超过1.6万个赞
知道大有可为答主
回答量:4789
采纳率:92%
帮助的人:307万
展开全部
max看名字就知道这是求最大的值的,那么在sql中我们是读取当前数据集一个字段中最大的一值的记录,下面看max语法。
最简单的语法
SELECT MAX(expression )
FROM tables
WHERE predicates;

实例
代码如下

SELECT MAX(salary) as "Highest salary"
FROM employees;

让它与 GROUP BY同时使用
代码如下

SELECT department, MAX(salary) as "Highest salary"
FROM employees
GROUP BY department;

问:我试图拉出一个表的一些信息。为了简化,假设表(report_history)有4列:
代码如下

USER_NAME,report_job_id,REPORT_NAME,report_run_date。

每一份报告,是在Oracle运行时,记录写入此表,注意到上述信息。我试图做的是拉从这个表中,当最后一次每一个不同的运行报告和谁跑,最后。
我的查询:
代码如下

SELECT report_name, max(report_run_date)
FROM report_history
GROUP BY report_name

但这样的结果是有问题的,下面看看正确的做法
代码如下

SELECT rh.user_name, rh.report_name, rh.report_run_date
FROM report_history rh,
(SELECT max(report_run_date) as maxdate, report_name
FROM report_history
GROUP BY report_name) maxresults
WHERE rh.report_name = maxresults.report_name
AND rh.report_run_date= maxresults.maxdate;
Let's take a few moments to explain what we've done.

方法二
代码如下

(SELECT max(report_run_date) as maxdate, report_name
FROM report_history
GROUP BY report_name) maxresults
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szm341
2012-11-26 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5102万
展开全部
112时间格式为yyyymm,也就是用年月分组
然后取得每组中最大的时间
更多追问追答
追问
go
select OrderDate ,count (distinct(ShipCountry))
from dbo.Orders
group by convert(char(6),OrderDate,112)

为什么像这样查询时,会提示“
OrderDate该列没有包含在聚合函数或 GROUP BY 子句中。
”聚合函数之外的字段作为分组就可以了,这儿为什么还报错??
追答
语句中没有用OrderDate字段本身作为分组条件,
而是截取了该字段的一部分
convert(char(6),OrderDate,112)只截取了OrderDate字段中的年月部分
所以你要想查询只能用
select convert(char(6),OrderDate,112) as OrderDate ,count (distinct(ShipCountry))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蚂蚁棚
2012-11-27 · TA获得超过138个赞
知道答主
回答量:200
采纳率:0%
帮助的人:129万
展开全部
group by convert(char(6),OrderDate,112) 是按年月分组,出来的当然是能查到的每个月的最后一天了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式