ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 分组排序取值

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-8-28 08:45 | 显示全部楼层 |阅读模式
按物资编码分组后,在组内按日期排序,取出最早和最晚日期对应的单价,请大师们指点迷津~!

该贴已经同步到 大鸭梨卡的微博

示例.7z

5.93 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2013-8-28 09:07 | 显示全部楼层
查看附件……

示例.rar

6.24 KB, 下载次数: 17

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-28 12:58 | 显示全部楼层
真是高手啊!!
能用sql实现吗?

TA的精华主题

TA的得分主题

发表于 2013-8-28 15:17 | 显示全部楼层
假设记录乱序:
  1. SELECT A.编码,A.名称,SUM(IIF(A.日期=B.最早日期,A.价格)) AS 最早价格,SUM(IIF(A.日期=C.最后日期,A.价格)) AS 最后价格 FROM ([示范$]A LEFT JOIN
  2. (SELECT 编码,MIN(日期) AS 最早日期 FROM [示范$]GROUP BY 编码)B
  3. ON A.编码=B.编码 AND A.日期=B.最早日期)
  4. LEFT JOIN
  5. (SELECT 编码,MAX(日期) AS 最后日期 FROM [示范$]GROUP BY 编码)C
  6. ON A.编码=C.编码 AND A.日期=C.最后日期
  7. GROUP BY A.编码,A.名称
复制代码
假设记录本身按日期升序的:
  1. SELECT A.编码,A.名称,FIRST(价格) AS 最早价格,LAST(价格) AS 最后价格 FROM [示范$] GROUP BY  A.编码,A.名称
复制代码
数据自己虚拟。

TA的精华主题

TA的得分主题

发表于 2013-8-28 15:56 | 显示全部楼层
本帖最后由 wuxiang_123 于 2013-8-28 15:57 编辑

{:soso_e117:}居然没留意到楼主帖子原来已经有附件:
  1. SELECT A.物资编码,A.名称,SUM(IIF(A.日期=B.最早日期,A.单价)) AS 最早单价,SUM(IIF(A.日期=C.最后日期,A.单价)) AS 最后单价 FROM ([sheet1$]A LEFT JOIN
  2. (SELECT 物资编码,MIN(日期) AS 最早日期 FROM [sheet1$]GROUP BY 物资编码)B
  3. ON A.物资编码=B.物资编码 AND A.日期=B.最早日期)
  4. LEFT JOIN
  5. (SELECT 物资编码,MAX(日期) AS 最后日期 FROM [sheet1$]GROUP BY 物资编码)C
  6. ON A.物资编码=C.物资编码 AND A.日期=C.最后日期
  7. GROUP BY A.物资编码,A.名称
复制代码

TA的精华主题

TA的得分主题

发表于 2013-8-29 08:32 | 显示全部楼层
[code=sql]USE tempdb
GO
IF OBJECT_ID('TEST') IS NOT NULL
  DROP TABLE TEST;
GO
CREATE TABLE TEST
(
  物资编码  CHAR(8),
  名称                  NVARCHAR(10),
  单价                  MONEY,
  日期                  DATE,
);
GO
INSERT INTO TEST VALUES('1','A',.5,'2013-8-28');
INSERT INTO TEST VALUES('2','B',1.9,'2012-10-20');
INSERT INTO TEST VALUES('1','A',.3,'2013-7-28');
INSERT INTO TEST VALUES('2','B',2.6,'2011-4-5');
INSERT INTO TEST VALUES('3','C',5.5,'2012-4-5');
INSERT INTO TEST VALUES('3','C',4.4,'2012-10-5');
INSERT INTO TEST VALUES('1','A',.9,'2013-6-28');
INSERT INTO TEST VALUES('1','A',.1,'2013-8-20');
INSERT INTO TEST VALUES('2','B',.8,'2012-6-10');
INSERT INTO TEST VALUES('2','B',1.5,'2012-10-10');
GO
----------------------------------------
SELECT * FROM TEST AS A
WHERE 日期 IN (SELECT MIN(日期) FROM TEST AS B
               WHERE A.物资编码 = B.物资编码)
UNION ALL
SELECT * FROM TEST AS A
WHERE 日期 IN (SELECT MAX(日期) FROM TEST AS B
               WHERE A.物资编码 = B.物资编码)
ORDER BY 1,4                  
----------------------------------------
/*
物资编码     名称         单价                    日期
-------- ---------- --------------------- ----------
1        A          0.90                  2013-06-28
1        A          0.50                  2013-08-28
2        B          2.60                  2011-04-05
2        B          1.90                  2012-10-20
3        C          5.50                  2012-04-05
3        C          4.40                  2012-10-05
*/[/code]

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-8-30 08:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
{:soso_e183:}牛人真多啊
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 16:51 , Processed in 0.035885 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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