我需要一个存储过程的示例,它使用另外两个存储过程(甚至只是一个)的结果,其中的结果用作组合存储过程中的表。我很可能从那里拿走。
web(多个站点)上的示例和php.net上的详细信息过于简单。
基本问题如下:
SELECT ttd.person_id, weight, min(test_date)
FROM (
CALL get_team_member_body_stats(1) AS tbs,
CALL get_team_member_first_last_test_date(1) AS ttd
WHERE tbs.person_id = ttd.person_id
AND (tbs.test_date = ttd.first_test OR tbs.test_date = ttd.last_test)
GROUP BY ttd.person_id;
END
谢谢你的帮助。在昨天和今天的在线搜索和实验中,我已经花了好几个小时来对付这个问题。
细节:
表1
存储过程get_team_member_body_stats(在team_id INT中)处理5个表(person、team、person_team、body_stats、person_body_stats)并生成:
person_id | body_stats_id | weight | test_date |
2 2 200 2011-01-01
4 3 250 2011-01-01
1 5 145 2011-03-01
2 6 210.4 2011-03-01
5 7 290 2011-03-01
1 8 140 2011-04-01
1 9 135 2011-05-01
4 11 245 2011-05-01
表2
存储过程get_team_member_first_last_test_date(在team_id INT中)在相同的表上工作并生成:
person_id | first_test | last_test
1 2011-03-01 2011-05-01
2 2011-01-01 2011-03-01
4 2011-01-01 2011-05-01
5 2011-03-01 2011-03-01
目标是加入这些组织并产生:
表3
person_id | first_weight | last_weight
1 145 135
2 200 210.4
4 250 245
5 290 290
谢谢
最佳答案
似乎(在这个社区中,由于我找不到任何使用其他存储过程的结果集作为新的select表的表的存储过程示例),mysql要么不支持这个,要么很难做我希望做的事情。
因此,我没有调用存储过程,而是将查询复制到最后一个过程中。
分隔符$$
CREATE DEFINER=`root`@`localhost`过程`get\u team\u stats\u更改`(
在团队内部
)
开始
选择SUM(起始权重)作为起始权重,
SUM(start_body_fat)作为start_body_fat,
总和(当前重量)作为当前重量,
总和(当前体脂)作为当前体脂,
总和(重量变化)作为重量变化,
体脂变化之和(
选择ls.person_id,
体重为起始体重,体脂为起始体重,
体重为当前体重,体脂为当前体脂,
fs.weight-ls.weight随体重变化,fs.body-fat-ls.body-fat随体重变化
从
(选择ttd.person_id、bs.weight、bs.body_fat、bs.test_date
以bs形式从body_stats
加入
((选择pbs.person_id,min(bs.test_date)作为第一个测试,max(bs.test_date)作为最后一个测试)
从身体状况来看,
人身统计为pbs,
团队成员作为tm,
团队为t
其中t.team_id=团队id
和tm.team_id=t.team_id
和tm.person_id=pbs.person_id
和pbs.body_stats_id=bs.body_stats_id
开始日期和测试日期
和bs.test_date>=t.starting_date
按人员分组(id)作为ttd,
人身统计为pbs)
在bs.test_date=ttd.first_test上
和pbs.person_id=ttd.person_id
和pbs.body_stats_id=bs.body_stats_id)作为fs,
(选择ttd.person_id、bs.weight、bs.body_fat、bs.test_date
以bs形式从body_stats
加入
((选择pbs.person_id,min(bs.test_date)作为第一个测试,max(bs.test_date)作为最后一个测试)
从身体状况来看,
人身统计为pbs,
团队成员作为tm,
团队为t
其中t.team_id=团队id
和tm.team_id=t.team_id
和tm.person_id=pbs.person_id
和pbs.body_stats_id=bs.body_stats_id
开始日期和测试日期
和bs.test_date>=t.starting_date
按人员分组(id)作为ttd,
人身统计为pbs)
在bs.test_date=ttd.last_test上
和pbs.person_id=ttd.person_id
和pbs.body_stats_id=bs.body_stats_id)作为ls
其中ls.person_id=fs.person_id
)作为三角洲;
结束