SQL 两个表联合查询记录中取最大值表1OnDate ITEM_ID MZZYH NRUL2012-12-25 17:20:00 1 5 1.22012-12-25 15:00:20 2 5 1.32012-12-25 16:00:00 3 5 1.42012-12-25 10:50:23 1 5 12012-12-25 10:10:09 2 5 12012-12-25 10:10:10 3 5 1表2ITEM_ID ITEM_NA
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/05 11:33:06
SQL 两个表联合查询记录中取最大值表1OnDate ITEM_ID MZZYH NRUL2012-12-25 17:20:00 1 5 1.22012-12-25 15:00:20 2 5 1.32012-12-25 16:00:00 3 5 1.42012-12-25 10:50:23 1 5 12012-12-25 10:10:09 2 5 12012-12-25 10:10:10 3 5 1表2ITEM_ID ITEM_NA
SQL 两个表联合查询记录中取最大值
表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需要在结果中查找出来,条件还是不变取时间最大的值.
SQL 两个表联合查询记录中取最大值表1OnDate ITEM_ID MZZYH NRUL2012-12-25 17:20:00 1 5 1.22012-12-25 15:00:20 2 5 1.32012-12-25 16:00:00 3 5 1.42012-12-25 10:50:23 1 5 12012-12-25 10:10:09 2 5 12012-12-25 10:10:10 3 5 1表2ITEM_ID ITEM_NA
你首先要弄明白自己需要的数据应该具备哪些条件:
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
其实对于复杂的查询,最好采用临时表和存储过程,使查询变得非常简单明了,便于维护