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需要在结果中查找出来,条件还是不变取时间最大的值。
展开
 我来答
帐号已注销
高粉答主

2020-05-19 · 每个回答都超有意思的
知道答主
回答量:2169
采纳率:0%
帮助的人:36.2万
展开全部

1、首先打开运行框,远程连接上服务器,如下图所示。

2、输入服务器的账号和密码,登录服务器。

3、这时已经连接上服务器,双击SQL管理器,如下图。

4、SQL管理器打开后如下图,输入服务器、用户名和密码。

5、然后在打开的数据库中,找到要查询的数据库,点击新建查询。

6、输入要查询表的内容,点击“执行”。

7、查询出来的数据就是表的内容了,如下图所示就完成了。

wanyunfan
2012-12-29 · TA获得超过131个赞
知道小有建树答主
回答量:133
采纳率:86%
帮助的人:74.9万
展开全部
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视图中,把上述语句拷到其中即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wjgchx
2012-12-28 · TA获得超过239个赞
知道小有建树答主
回答量:143
采纳率:0%
帮助的人:144万
展开全部
你首先要弄明白自己需要的数据应该具备哪些条件:
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
其实对于复杂的查询,最好采用临时表和存储过程,使查询变得非常简单明了,便于维护
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友dacd15b
2012-12-28 · TA获得超过216个赞
知道小有建树答主
回答量:335
采纳率:0%
帮助的人:235万
展开全部
额。。。问题到底是什么?
追问
上面两个表我需要查找得到“ITEM_NAME 、 OnDate、 VALUE、 UNIT、 NRUL”这几个字段的值,查找条件是知道 MZZYH字段的值,要求满足查找结果中ITEM_NAME的值不能重复出现,如果有相同的取相应的OnDate中最大的值
追答
我不太懂sql,但是我对时间排序有一点经验,就是先用replace函数将字符型中的非数字字符替换为空,再用cast将字符型数字转化为整型数字。再用order排序。最后的结果为:
order by cast(replace(OnDate,'-','') as int),
因为时间的先后跟数字大小是呈线性关系的。
不对不要怪我,呵呵。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式