以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]多条件下的多表查询如何实现  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=89897)

--  作者:meiyi
--  发布时间:2016/8/31 23:36:00
--  [求助]多条件下的多表查询如何实现
有“学生信息表”(ID,姓名,是否退学……)和“学生交费流水表”(姓名,ID,交费日期,金额……),两表通过“ID”和“姓名”关联。现在我想查询:学生最后一次交费日期距现在已经超过5个月的,并且“是否退学”为false的学生名单。值得说明的是每个学生有过很多次交费。如何实现呢?是用查询表吗?如果用查询表查询条件怎么写?
--  作者:狐狸爸爸
--  发布时间:2016/9/1 8:36:00
--  

大概如此:

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:sql.txt

 

多看看:

http://www.foxtable.com/webhelp/scr/0688.htm

 


--  作者:meiyi
--  发布时间:2016/9/1 15:17:00
--  

好象没有体现出学生的“最近一次缴费日”,如何体现出每个学生的最近一次缴费日期。


--  作者:有点蓝
--  发布时间:2016/9/1 15:32:00
--  
Dim sql As String ="sel ect {学生信息表}.id,{学生信息表}.姓名,{学生信息表}.其他列1,{学生信息表}.其他列2,{学生交费流水表}.缴费日期,{学生交费流水表}.缴费金额 from {学生信息表} INNER JOIN {学生缴费流水表} on {学生信息表}.id = {学生缴费流水表}.id  where {学生信息表}.id not In (Sel ect id from {学生交费流水表} Where 缴费日期 > #"  & dt & "#) order by 缴费日期 desc"

如果想要准确的sql最好上传例子测试

--  作者:meiyi
--  发布时间:2016/9/1 23:45:00
--  

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:美艺数据库.rar

密码:518

问题如一楼,查询的条件是:学最最近的一次交费日期超过5个月,并且是在校学生。请问是用查询表实现吗?


--  作者:有点蓝
--  发布时间:2016/9/2 9:07:00
--  
用以下sql创建查询表,注意把“sel ect ”里的空格去掉

sel ect a.*,b.交费时间 from {全部学生信息} as a inner join (sel ect 姓名,max(交费时间) as 交费时间 from {学费记录流水} group by 姓名) as b on a.姓名 = b.姓名 where a.是否退学=false and DateDiff(\'m\',b.交费时间,date()) >= 5

--  作者:meiyi
--  发布时间:2016/9/2 23:27:00
--  

谢谢,真牛!


--  作者:meiyi
--  发布时间:2016/9/4 11:48:00
--  

在您的基础上,我作了一下调整,可电脑提示有误,您帮助看一下呗。

 

语句:

sel ect a.ID,a.姓名,a.舞种,a.班号,b.交费时间,b.金额,b.启用时间,b.备注 from {全部学生信息} as a inner join (se lect 姓名,舞种,交费时间,金额,启用时间,备注,max(启用时间) as 启用时间 from {学费记录流水} group by 姓名) as b on a.姓名 = b.姓名 and a.舞种 = b.舞种 where a.是否退学=false and DateDiff(\'m\',b.启用时间,date()) >= 5 order by a.班号

 

电脑提示:试图执行的查询中不包含作为合计函数一部分的特定表达式 \'舞种\' 。

 

不知道还有没有其它错误。


--  作者:狐狸爸爸
--  发布时间:2016/9/4 15:56:00
--  
当年使用集合函数统计数据时,除了 统计列外,其他列必须都是分组列。

例如 

select a,b,c,sum(d) group by a 

是不行的,必须:

select a,b,c,sum(d) group by a,b,c

--  作者:meiyi
--  发布时间:2016/9/14 22:41:00
--  

发现还是不行,max(启用时间)没有发挥作用,查询出所有了启用时间距今超过5个月的所有记录,而不是最近的一次启用时间超过5个月的记录。请问该怎么办?