ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4009|回复: 9

[求助] MQ查询:按最早日期查询指定条件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-10-11 10:00 | 显示全部楼层 |阅读模式
请问附件中参照:wuxiang_123  老师的方法(http://club.excelhome.net/viewth ... ;extra=&page=42),按两个条件动态查询两个表,语句如下:
SELECT  * FROM
(SELECT  * FROM  `A$`
union all
SELECT  * FROM  `B$`)
WHERE (`A$`.零部件名称=?) AND (`A$`.型号=?)
想实现:2个查询条件不变,查询日期最早的记录。试着用MIN函数改为如下(下划线部分),则提示语句出错。
SELECT  * FROM

(SELECT  * FROM  `A$`
(SELECT  * FROM  `A$` where    min(`A$`.日期)
union all
SELECT  * FROM  `B$`)
WHERE (`A$`.零部件名称=?) AND (`A$`.型号=?)

物别说明:不设置3个动态条件。

Book1.rar

5.33 KB, 下载次数: 51

TA的精华主题

TA的得分主题

发表于 2010-10-11 11:01 | 显示全部楼层
  1. SELECT  min(日期) as 最早日期,零部件名称,型号,供应商,批次号,数量 FROM
  2. (SELECT  * FROM  `A$`
  3. union all
  4. SELECT  * FROM  `b$`)
  5. group by 零部件名称,型号,供应商,批次号,数量
  6. HAVING (`A$`.零部件名称=?) AND (`A$`.型号=?)
复制代码

其实这里不用MQ也可以

TA的精华主题

TA的得分主题

发表于 2010-10-11 11:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
MIN()是聚合函数,假如存在其他非聚合函数的字段时,必须使用GROUP BY。而聚合函数作为条件时,用HAVING而不能使用WHERE。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-11 13:18 | 显示全部楼层
原帖由 wuxiang_123 于 2010-10-11 11:01 发表
SELECT  min(日期) as 最早日期,零部件名称,型号,供应商,批次号,数量 FROM
(SELECT  * FROM  `A$`
union all
SELECT  * FROM  `b$`)
group by 零部件名称,型号,供应商,批次号,数量
HAVING (`A$`.零部件名称=?)  ...


可能我没有表达清楚,我想实现的最终结果:按2个条件,只显示两表最最早的日期记录,按上述语句运行如附图,会将所有日期显示出来(这是我不想要记录)。

[ 本帖最后由 cnxwj 于 2010-10-11 13:20 编辑 ]
截图.jpg

TA的精华主题

TA的得分主题

发表于 2010-10-11 16:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
在我这正常哦,要不贴上你修改后的文件。
1.gif

TA的精华主题

TA的得分主题

发表于 2010-10-11 16:33 | 显示全部楼层
  1. SELECT  MIN(日期) as 最早日期,a.零部件名称,a.型号,供应商,批次号,数量 FROM
  2. (SELECT  * FROM  `A$`
  3. union all
  4. SELECT  * FROM  `b$`)a,[查询$a1:b2]b
  5. where a.零部件名称=b.零部件名称 and a.型号=b.型号
  6. group by a.零部件名称,a.型号,供应商,批次号,数量
复制代码
OLE DB的SQL,非MQ,但要手动刷新。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-12 09:39 | 显示全部楼层
很奇怪,我试了很多次,只有1次才成功,多测试几次不成功,不知何解,重新上传附件。

Book1.rar

14.78 KB, 下载次数: 25

TA的精华主题

TA的得分主题

发表于 2010-10-12 11:45 | 显示全部楼层
因为数量不同,所以要再修改SQL.
  1. select a.* from
  2. (SELECT * FROM  `A$` union all SELECT  * FROM  `b$`)a
  3. ,[查询$a1:b2]b,
  4. (select min(日期) as t,零部件名称,型号 from
  5. (SELECT * FROM  `A$` union all SELECT  * FROM  `b$`)
  6. group by 零部件名称,型号)c
  7. where a.零部件名称=b.零部件名称 and a.日期=c.t and a.零部件名称=c.零部件名称 and a.型号=b.型号 and a.型号=c.型号
复制代码
有时间再简化.

[ 本帖最后由 wuxiang_123 于 2010-10-12 12:02 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-12 14:13 | 显示全部楼层
太感谢吴老师的帮助,这次修改后测试正确。连续看了3个小时,很难理解(1:书写格式,2:条件)。烦请方便的时候讲解。
select a.* from
(SELECT * FROM  `A$` union all SELECT  * FROM  `b$`)a ,  //注:')a之间不用空格表示什么意思?
[查询$a1:b2]b,//注:')b之间不用空格表示什么意思?
(select min(日期) as t,零部件名称,型号 from
(SELECT * FROM  `A$` union all SELECT  * FROM  `b$`)
group by 零部件名称,型号)c   //注:)c  ,此处C是表还是字段?
where a.零部件名称=b.零部件名称 and a.日期=c.t and a.零部件名称=c.零部件名称 and a.型号=b.型号 and a.型号=c.型号

TA的精华主题

TA的得分主题

发表于 2010-10-13 13:22 | 显示全部楼层
a、b、c均为表别名,用于简化语句。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-29 20:48 , Processed in 0.065101 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表