再问.这个功能Mysql能实现吗????

klggg 2002-10-14 01:14:03
以下表的结构和内容,
CREATE TABLE PactRate (
id int(11) NOT NULL auto_increment,
PactId int(11) default NULL,
GatheringYear int(5) default NULL,
PactCost int(11) default NULL,
PRIMARY KEY (id),
UNIQUE KEY id (id)
) TYPE=MyISAM;

INSERT INTO PactRate VALUES (1, 1, 1999, 19990);
INSERT INTO PactRate VALUES (2, 1, 2000, 12000);
INSERT INTO PactRate VALUES (3, 3, 1002, 12000);
INSERT INTO PactRate VALUES (4, 4, 2002, 50000);
INSERT INTO PactRate VALUES (5, 5, 2002, 100);

怎么样得到这样的结果
id PactId GatheringYear PactCost
2 1 2000 12000 *
3 3 1002 12000
4 4 2002 50000
5 5 2002 100

运行 mysql语句
select * from PactRate group by PactId
只能得到
id PactId GatheringYear PactCost
1 1 1999 12000 *
3 3 1002 12000
4 4 2002 50000
5 5 2002 100
在线等待..

...全文
48 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
klggg 2002-10-17
  • 打赏
  • 举报
回复
哦。如果今天再没有高手给出更简洁的方法,我就结帖了。
这问题我问过很多人。也得不到答案。
klggg 2002-10-17
  • 打赏
  • 举报
回复
谢谢楼上的回复,也可以说是一种解决的方法,我也理解了这种做法,给我一定的启迪.:)
但如果我这个表字段有20来个或者是更多。总是显得很是麻烦。
看来mysql查询方面的功能还是有不少欠缺的.
yu_dx 2002-10-17
  • 打赏
  • 举报
回复
我只是说明可以实现。
单条SQL的效率在大多数情况下是会高一些,但如果数据库的结构设计的合理,
联合、多表查询也是不会有太大影响。
yu_dx 2002-10-16
  • 打赏
  • 举报
回复
不好意思,理解稍微有点错误,但解决办法是有的:
先看SQL
------------------------------
SELECT
SUBSTRING(MAX(CONCAT(gatheringyear,LPAD(id,8,'0'),pactCost)),5,8)+0 AS id,
pactid,
LEFT(MAX(CONCAT(gatheringyear,LPAD(id,8,'0'),pactCost)),4) AS gatheringyear,
SUBSTRING(MAX(CONCAT(gatheringyear,LPAD(id,8,'0'),pactCost)),13) AS pactCost
FROM PactRate GROUP BY pactid;
------------------------------
由于SQL中的GROUP 和 MAX是有优先级之分的,所以如果要用一条SQL语句,就必须对结果进行处理。gatgeringyear定长为4,将id用0补齐8位(应该够你用了)再用MAX(),如果你pactCost是float or double,用相应的办法处理

这是MYSQL为GROUP相关函数提供的经典例子,我稍微修改了一下。有兴趣,参阅
http://www.mysql.com/doc/en/example-Maximum-column-group-row.html
klggg 2002-10-15
  • 打赏
  • 举报
回复
谢谢回复,不过你的回复也是错误.
看看这个帖子吧
http://www.phpx.com/happy/showthread.php?s=&threadid=14413
http://www.phpx.com/happy/showthread.php?s=&threadid=14405

先按PactId进行分组,如存在同组的记录取 GatheringYear 最大的那条记录
比如各部门每人的业绩报表
按部门号对每个人进行分组,每个人在不同时期有不同的业绩
取的时候取日期最大的那个记录
像2000年 甲业绩是 12000
2001年 甲业绩是 15000
那就取 2001年的那条记录,因为2001>2000

真的有人知道吗?用一条SQL语句。
yu_dx 2002-10-14
  • 打赏
  • 举报
回复
如果没理解错,你是要相同practId,只显示GrtheringYear比较近的数据
try this:
select id,pactid,max(gatheringyear),pactcost from PactRate group by pactid;
klggg 2002-10-14
  • 打赏
  • 举报
回复
你这个方法不行吧?
bombshell 2002-10-14
  • 打赏
  • 举报
回复
select * from PactRate limit 1,6
bombshell 2002-10-14
  • 打赏
  • 举报
回复
select * from pactrate where id in (

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧