SQL 两个表联合查询记录中取最大值
表1OnDateITEM_IDMZZYHNRUL2012-12-2517:20:00151.22012-12-2515:00:20251.32012-12-2516:00...
表1
OnDate ITEM_ID MZZYH NRUL
2012-12-25 17:20:00 1 5 1.2
2012-12-25 15:00:20 2 5 1.3
2012-12-25 16:00:00 3 5 1.4
2012-12-25 10:50:23 1 5 1
2012-12-25 10:10:09 2 5 1
2012-12-25 10:10:10 3 5 1
表2
ITEM_ID ITEM_NAME VALUE UNIT
1 a 1.2-1.5 IU/ml
2 b 2-4 IU/ml
3 c 2-3 IU/ml
上面两个表我需要查找得到“ITEM_NAME 、 OnDate、 VALUE、 UNIT”这几个字段的值,查找条件是知道 MZZYH字段的值,要求满足查找结果中ITEM_NAME的值不能重复出现,如果有相同的取相应的OnDate中最大的值
问题补充:SELECT a.ITEM_NAME,a.REFERENCE_VALUE,a.UNIT,b.OnDate FROM ItemInfo a, PatientResult b WHERE a.ITEM_ID=b.ITEM_ID and b.MZZYH='5'
用上面语句查询得到的结果是
a 1.2-1.5 IU/ml 2012-12-25 17:20:00.000
b 2-4 IU/ml 2012-12-25 15:00:20.000
c 2-3 IU/ml 2012-12-25 16:00:00.000
a 1.2-1.5 IU/ml 2012-12-25 10:50:23.000
b 2-4 IU/ml 2012-12-25 10:10:09.000
c 2-3 IU/ml 2012-12-25 10:10:10.000
ITEM_NAME重复了
-------
select b.ITEM_NAME,b.VALUE,b.UNIT,a.ddd
from (select ITEM_ID,MAX(OnDate) as ddd from 表1 where MZZYH='5' Group By ITEM_ID) a inner join 表2 b
on a.ITEM_ID = 表2.ITEM_ID
能够查到需要的数据了,现在在表1中新增了字段NRUL需要在结果中查找出来,条件还是不变取时间最大的值。 展开
OnDate ITEM_ID MZZYH NRUL
2012-12-25 17:20:00 1 5 1.2
2012-12-25 15:00:20 2 5 1.3
2012-12-25 16:00:00 3 5 1.4
2012-12-25 10:50:23 1 5 1
2012-12-25 10:10:09 2 5 1
2012-12-25 10:10:10 3 5 1
表2
ITEM_ID ITEM_NAME VALUE UNIT
1 a 1.2-1.5 IU/ml
2 b 2-4 IU/ml
3 c 2-3 IU/ml
上面两个表我需要查找得到“ITEM_NAME 、 OnDate、 VALUE、 UNIT”这几个字段的值,查找条件是知道 MZZYH字段的值,要求满足查找结果中ITEM_NAME的值不能重复出现,如果有相同的取相应的OnDate中最大的值
问题补充:SELECT a.ITEM_NAME,a.REFERENCE_VALUE,a.UNIT,b.OnDate FROM ItemInfo a, PatientResult b WHERE a.ITEM_ID=b.ITEM_ID and b.MZZYH='5'
用上面语句查询得到的结果是
a 1.2-1.5 IU/ml 2012-12-25 17:20:00.000
b 2-4 IU/ml 2012-12-25 15:00:20.000
c 2-3 IU/ml 2012-12-25 16:00:00.000
a 1.2-1.5 IU/ml 2012-12-25 10:50:23.000
b 2-4 IU/ml 2012-12-25 10:10:09.000
c 2-3 IU/ml 2012-12-25 10:10:10.000
ITEM_NAME重复了
-------
select b.ITEM_NAME,b.VALUE,b.UNIT,a.ddd
from (select ITEM_ID,MAX(OnDate) as ddd from 表1 where MZZYH='5' Group By ITEM_ID) a inner join 表2 b
on a.ITEM_ID = 表2.ITEM_ID
能够查到需要的数据了,现在在表1中新增了字段NRUL需要在结果中查找出来,条件还是不变取时间最大的值。 展开
展开全部
SELECT 表2.ITEM_NAME, Max(表2.VALUE) AS VALUE之最大值, 表2.UNIT, Max(表1.Ondate) AS Ondate之最大值
FROM 表1 INNER JOIN 表2 ON 表1.ITEM_ID = 表2.ITEM_ID
GROUP BY 表2.ITEM_NAME, 表2.UNIT;
把表名及字段名都能对上,新建一个查询,切换到SQL视图中,把上述语句拷到其中即可。
FROM 表1 INNER JOIN 表2 ON 表1.ITEM_ID = 表2.ITEM_ID
GROUP BY 表2.ITEM_NAME, 表2.UNIT;
把表名及字段名都能对上,新建一个查询,切换到SQL视图中,把上述语句拷到其中即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你首先要弄明白自己需要的数据应该具备哪些条件:
1. 按照Item_ID分组。
2. 取每组中OnDate中最大的记录,实际上就是取最新的数据。
3. 数据过滤条件是 MZZYH='5'
第一步:select max(OnDate)as date, ITEM_ID from PatientResult where MZZYH='5' group by ITEM_ID
上面的语句得到的记录集为按照ITEM_ID分组,获得每个分组的最新日期。
第二步,分析目前的三个记录集:
a)包含有 ITEM_ID , max(OnDate)的主记录,由第一步的查询结果得到,它的记录条数就是最后结果的记录条数。
b) 需要在结果中输出的 与主记录对应的PatientResult 原始表记录的内容。
c)与ITEM_ID对应的名字信息ItemInfo ,
其中记录集a为主记录,a与b之间的对应关系为a. ITEM_ID = b. ITEM_ID and a.date = b.OnDate
其中a与c的关系为 a.ITEM_ID = c. ITEM_ID
select b.*, c.* from (select max(OnDate)as date, ITEM_ID from PatientResult where MZZYH='5' group by ITEM_ID) as a, PatientResult as b, ItemInfo as c where a.ITEM_ID=b.ITEM_ID and a.date = b.OnDate and a.ITEM_ID=c.ITEM_ID
其实对于复杂的查询,最好采用临时表和存储过程,使查询变得非常简单明了,便于维护
1. 按照Item_ID分组。
2. 取每组中OnDate中最大的记录,实际上就是取最新的数据。
3. 数据过滤条件是 MZZYH='5'
第一步:select max(OnDate)as date, ITEM_ID from PatientResult where MZZYH='5' group by ITEM_ID
上面的语句得到的记录集为按照ITEM_ID分组,获得每个分组的最新日期。
第二步,分析目前的三个记录集:
a)包含有 ITEM_ID , max(OnDate)的主记录,由第一步的查询结果得到,它的记录条数就是最后结果的记录条数。
b) 需要在结果中输出的 与主记录对应的PatientResult 原始表记录的内容。
c)与ITEM_ID对应的名字信息ItemInfo ,
其中记录集a为主记录,a与b之间的对应关系为a. ITEM_ID = b. ITEM_ID and a.date = b.OnDate
其中a与c的关系为 a.ITEM_ID = c. ITEM_ID
select b.*, c.* from (select max(OnDate)as date, ITEM_ID from PatientResult where MZZYH='5' group by ITEM_ID) as a, PatientResult as b, ItemInfo as c where a.ITEM_ID=b.ITEM_ID and a.date = b.OnDate and a.ITEM_ID=c.ITEM_ID
其实对于复杂的查询,最好采用临时表和存储过程,使查询变得非常简单明了,便于维护
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
额。。。问题到底是什么?
追问
上面两个表我需要查找得到“ITEM_NAME 、 OnDate、 VALUE、 UNIT、 NRUL”这几个字段的值,查找条件是知道 MZZYH字段的值,要求满足查找结果中ITEM_NAME的值不能重复出现,如果有相同的取相应的OnDate中最大的值
追答
我不太懂sql,但是我对时间排序有一点经验,就是先用replace函数将字符型中的非数字字符替换为空,再用cast将字符型数字转化为整型数字。再用order排序。最后的结果为:
order by cast(replace(OnDate,'-','') as int),
因为时间的先后跟数字大小是呈线性关系的。
不对不要怪我,呵呵。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询