ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 请教如何实现社会保险费下年应征数查询——方法在9楼、10楼

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-2-16 22:33 | 显示全部楼层 |阅读模式
本帖最后由 乐以忘忧 于 2012-2-19 10:27 编辑

请教高手:此数据库为本人设计的新农保和城居保的数据库的一部分
一对多的两个表(相当于一个台账一个流水账),建立查询,如何按缴费时间只显示最近的一条记录?(以便作为下年应征的数据)。
    我用以下语句查询出来有重复(不应有重复)
SELECT a.*
FROM 05个人明细 AS a
WHERE exists(select 1 from 05个人明细 where 公民身份证=a.公民身份证
and a.缴费类型 = '正常应缴'  
and 时间<a.时间);


    新农保及城居保为没有条件参加城镇职工社保的广大人群服务,希望各位高手多多帮忙! db1.rar (12.73 KB, 下载次数: 20)




TA的精华主题

TA的得分主题

发表于 2012-2-16 23:12 | 显示全部楼层
SELECT a.*
FROM 05个人明细 AS a
WHERE not exists(select 1 from 05个人明细 where 公民身份证=a.公民身份证
and 缴费类型 = '正常应缴'  
and 时间>a.时间)

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-17 10:41 | 显示全部楼层
marco 发表于 2012-2-16 23:12
SELECT a.*
FROM 05个人明细 AS a
WHERE not exists(select 1 from 05个人明细 where 公民身份证=a.公民身 ...

用这个语句在我的实际数据库中有重复的身份证,而且缴费类型有“正常应缴”,“中断或延迟年限补收”,“一次性缴费”,比原来我查的记录还多。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-17 10:43 | 显示全部楼层
难道只能做两个查询,第一个查出所有的“正常应缴”,第二在第一个查询中查出最后一次时间,用一个查询应如何做呢?

TA的精华主题

TA的得分主题

发表于 2012-2-17 13:51 | 显示全部楼层
我测试OK,你全部复制替换原语句.

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-17 14:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你测试的三条没问题,我的数据有123,478条,筛选出来应该有62,734条

TA的精华主题

TA的得分主题

发表于 2012-2-17 15:38 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-2-18 16:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
麻烦请你帮我看一下,我用下面语句查出来的“正常应缴”只有60,744条(而且还有重复),应有数据6,2770条
SELECT a.*
FROM 05个人明细 AS a
WHERE exists(select 1 from 05个人明细 where 公民身份证=a.公民身份证 and a.缴费类型 = 1  and 时间<a.时间);
其中缴费类型我设计时用ID表示  
1  正常应缴
2  中继或延迟年限补收
3  一次性缴费
Database1.part01.rar (292 KB, 下载次数: 8)    Database1.part02.rar (184.53 KB, 下载次数: 9)
非常感谢您对我的帮助!

TA的精华主题

TA的得分主题

发表于 2012-2-18 18:29 | 显示全部楼层
共有62734条记录
SELECT a.*
FROM 个人明细 AS a
WHERE not exists(select 1 from 个人明细 where 公民身份证=a.公民身份证 and 缴费类型 = 1  and 时间>a.时间) and a.缴费类型 = 1

TA的精华主题

TA的得分主题

发表于 2012-2-18 19:29 | 显示全部楼层
用ACCESS还有两种方法效率比较高:
一:如果缴费记录的时间都是正常从小到大的顺序,用LAST函数就可以得到最后的缴费金额
SELECT 公民身份证, Max(时间) AS 时间之最大值, Last(个人缴费) AS 个人缴费之Last
FROM 05个人明细
WHERE 缴费类型=1
GROUP BY 公民身份证
二:是针对缴费记录的时间无序而言的:
查询1:
SELECT [05个人明细].公民身份证, Max([05个人明细].时间) AS 时间之最大值
FROM 05个人明细
WHERE 缴费类型=1
GROUP BY [05个人明细].公民身份证;
查询2:
SELECT [05个人明细].公民身份证, [05个人明细].时间, [05个人明细].缴费类型, [05个人明细].个人缴费
FROM 05个人明细 INNER JOIN 查询1 ON ([05个人明细].公民身份证 = 查询1.公民身份证) AND ([05个人明细].时间 = 查询1.时间之最大值)
WHERE [05个人明细].缴费类型=1
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-10 18:41 , Processed in 0.027194 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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