教你快速解决“一个多对多”的疑难问题

问题:

A表
syno seid date bnid num
667 10229 2006072816:57:41 12 3
667 10029 2006072819:10:28 12 7
667 20007 2006072820:01:26 12 8
667 10229 2006073007:11:22 12 9
667 10319 2006073111:09:56 12 4
667 10229 2006080110:56:38 12 1
667 10229 2006080211:06:38 12 6
B表
syno beid riqi bnid 
667 12007 2006072815:08:40 12
667 12011 2006072818:16:45 12
667 12012 2006073009:10:42 12
结果应该是:
syno beid seid sum(num)
667 12007 10229 3
667 12011 10029 7
667 12011 10229 9
667 12011 20007 8
667 12012 10229 7
667 12012 10319 4 数据挖掘研究院 

说明:

A表B表syno,bnid相关,相同syno在A表中的记录日期date总是小于B表riqi,

要求:两个表相连后按照syno,beid,seid分组,计算num值,

如果B表中相同的syno有多个记录,计算时要比较A表B表中的日期,

判断A表中的日期记录在B表中的时间段。

解决方法(参考示例:

CREATE TABLE Temp1 (syno int,seid int,[date] varchar(16),bnid int,num int)
CREATE TABLE Temp2 (syno int,beid int,riqi varchar(16),bnid int)
INSERT INTO Temp1 
SELECT 667, 10229, ""2006072816:57:41"", 12, 3 UNION ALL
SELECT 667, 10029, ""2006072819:10:28"" ,12 ,7 UNION ALL
SELECT 667, 20007, ""2006072820:01:26"" ,12 ,8 UNION ALL
SELECT 667, 10229, ""2006073007:11:22"" ,12 ,9 UNION ALL
SELECT 667, 10319, ""2006073111:09:56"" ,12 ,4 UNION ALL
SELECT 667, 10229, ""2006080110:56:38"" ,12 ,1 UNION ALL
SELECT 667, 10229, ""2006080211:06:38"" ,12 ,6
INSERT INTO Temp2 
SELECT 667 ,12007, ""2006072815:08:40"", 12 UNION ALL
SELECT 667 ,12011, ""2006072818:16:45"" ,12 UNION ALL
SELECT 667, 12012, ""2006073009:10:42"" ,12
go
--建立函数
CREATE FUNCTION Get_beid(@syno int,@bnid int ,@date varchar(16))
RETURNS int
AS 
BEGIN
DECLARE @RETURN int 
SET @RETURN=(SELECT Top 1 beid FROM Temp2 WHERE syno=@syno AND bnid=@bnid AND riqi<=@date ORDER BY riqi DESC)
RETURN @RETURN
END
go
--计算过程
SELECT syno,beid,seid,sum(num) FROM (
SELECT syno,dbo.Get_beid(syno,bnid,[date]) AS beid,seid,num FROM Temp1 
) AS SUM_T
GROUP BY syno,beid,seid
ORDER BY syno,beid,seid
--删除测试表
DROP TABLE Temp1,Temp2
DROP FUNCTION Get_beid 数据挖掘交友 

(责任编辑:卢兆林)

数据挖掘交友

Create By Any-Extract(WL-AE)

数据挖掘论坛

[数据挖掘专家] [数据挖掘研究院] [数据挖掘论坛] [数据挖掘实验室]
上一篇:实例讲解一个不用游标就可以实现的问题
下一篇:解决SQL Server中附加数据库的出错问题
最新评论共有 0 位网友发表了评论 , 查看所有评论
发表评论( 不能超过250字,需审核,请自觉遵守互联网相关政策法规。 )
匿名?
数据挖掘网站导航 数据挖掘论坛导航
  • 数据挖掘工具
  • 数据挖掘论坛
  • DataCruncher - Cognos
  • MineSet - MathSoft
  • Intelligent Miner - GainSmarts
  • Sqlserver - SAS - Clementine
  • CART - Weka - WizSoft
  • NeuroShell - ModelQuest
  • data mining tools - Darwin
  • 数据挖掘交友
  • 数据挖掘博客
  • 数据挖掘工具
  • 数据挖掘资源
  • 数据挖掘技术算法
  • 数据挖掘相关期刊、会议
  • 研究院联盟合作专区
  • 数据挖掘基础与相关技术
  • 数据挖掘厂商与就业
  • 数据挖掘研究者乐园
  • 知名厂商数据挖掘工具资料
  • 国内数据挖掘实验室
  • Foreign Data Mining Lab
  • 热点关注
  • MS SQL "1813"错误产生的原因及解决
  • SQL Server 2005的30个最重要特点
  • SQL Server数据仓库相关概念及构建流程
  • SQL Server 2005 Integration Services - P
  • SQL Server 2005 Integration Services - P
  • SQL Server 2005 Integration Services - L
  • 使用 WebSphere Commerce Analyzer 以关联
  • SQL Server 2005 Integration Services - P
  • SQL Server 2005 Integration Services - P
  • SQL Server 2005 Integration Services - F
  • 论坛最新话题
  • Foundations of Statistical Natural Langu
  • Game Theory meet Data Mining: A Recent P
  • System Building: How does it help or hin
  • 数据挖掘与Clementine培训
  • 新手报到
  • 求 SASEM 客户流失预测分析
  • 数据挖掘工程师/搜索研究院—北京——无线
  • 数据挖掘入门介绍(如何着手数据挖掘)
  • Information Overload Survey Results
  • The INEX 2005 Workshop on Element Retrie
  • 相关资讯
  • SQL Server 2005的30个最重要特点
  • 深入了解SQL Server数据库的线程与纤程
  • 数据挖掘实验室资料
  • 数据挖掘博客地址
  • 数据挖掘实验室网站地址
  • Prepare for Medicare audits by using dat
  • 注册成为SAS用户与爱好者俱乐部会员
  • 水南梅
  • 明日烟
  • 新人报道
  • 下载
  • 厦门服务器托管,450元/月—0592-5177319 高
  • 买空间送域名--0592-5177319 高静