select t1.分类,t1.商品名称,table.库存,t1.更新时间
from (
select 分类,商品名称,max(更新时间) 更新时间 from table
group by 分类,商品名称
) t1
inner join table on t1.分类=table.分类 and t1.商品名称=table.商品名称 and t1.更新时间
=table.更新时间
关于SQL最大值查询语句的记录
SELECT
bsnum,
STATE AS FILE_STATE
FROM
FILE_RECORD r
WHERE
STATE =(
SELECT
MAX(STATE)
FROM
FILE_RECORD
WHERE
bsnum = r.bsnum
);
小技巧:有时需要测试sql语法但又觉得创建表麻烦,可以使用创建一个临时表,如下:
select id, count(t.id) from
(
select 1 as id, 2 as age, 'F' as sex from dual union
select 2 as id, 2 as age, 'M' as sex from dual union
select 3 as id, 3 as age, 'F' as sex from dual union
select 4 as id, 4 as age, 'M' as sex from dual
)t
设存放现有数据的表名为“食品库”,答案如下:
SELECT A.分类,A.商品名称,B.库存,A.最大时间
FROM
(SELECT 分类,商品名称,MAX(更新时间) as 最大时间 FROM 食品库 group by 分类,商品名称) as A
LEFT JOIN
(SELECT * FROM 食品库) as B ON A.分类 = B.分类 and A.商品名称 = B.商品名称 and A.最大时间 = B.更新时间
解题步骤如下:
1、把现有数据分组,取得组内最大更新时间。
这个结果和最终的目标只差“库存”字段。
2、再次查询食品库,获得库存数。
3确定以上两表的关联条件:
将第一步得到的结果集命名为A,第2步得到的结果集命名为B. 关联条件如下
4、运用LEFT JOIN将两表连接,得到最终结果。
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的。换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.分类 = B.分类 and A.商品名称 = B.商品名称 and A.最大时间 = B.更新时间)。B表记录不足的地方均为NULL。
参考资料:
百度百科.Left join
select t1.分类,t1.商品名称,table.库存,t1.更新时间
from (
select 分类,商品名称,max(更新时间) 更新时间 from table
group by 分类,商品名称
) t1
inner join table on t1.分类=table.分类 and t1.商品名称=table.商品名称 and t1.更新时间=table.更新时间
sql 查询分组最大值
可以使用max 与group by组合使用达到目的
比如查询每个部门的最高工资
table
id departmentId salary
1 1 4500
2 2 5600
3 1 6000
4 2 5000
sql语句
select departmentId ,max(salary) salary from table group by departmentd;
结果
departmentId salary
1 6000
2 5600
select 分类,商品名称, max(库存) as 库存,max(更新时间) as 更新时间
from table
group by 分类,商品名称;